我程序需要升级本目录下的文件,所以需要覆盖或者创建文件,在xp下运行很好,在wi
n7下uac开启时,每次都覆盖或者创建文件失败,在网上查到是权限不够,有两种办法解
决:1. 加上*.exe.manifest,可以升级,但是每次启动都会出uac那个提示对话框。2. 当要覆盖时用runas运行一个新进程,但是这个很麻烦,而且对程序改动很大。有没有更好的办法呀。比如在需要权限时,能弹出提示需要权限而不是新启一个进程吗?谢谢了。

解决方案 »

  1.   

    从Vista开始,系统的权限机制已经发生了变化。所有的用户默认的都是普通的权限。一般应用程序都需要添加manefest文件。来制定权限为Administrator。来解决这个问题。 
      

  2.   

    比如在需要权限时,能弹出提示需要权限而不是新启一个进程吗?不能。只能是以启动新进程的方式弹出UAC。楼主既然是升级程序,那么升级包属于安装程序的范畴,执行安装程序弹出UAC是十分正常的。而且安装,升级之类的过程原则上就应该弹出UAC。
      

  3.   


    关键是我升级程序和功能程序是在一起的,这样每次启动程序都要弹出uac的提示框,实在影响用户体验呀。
      

  4.   

    请问服务进程在win7下是不是没有uac提示呀?
    在网上看到说服务进程是没有uac提示的,请问是这样吗?
    想着不行,就把升级功能做成服务。谢谢了。
      

  5.   

    微软有个工具,可以添加UAC白名单
    http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=24da89e9-b581-47b0-b45e-492dd6da2971
      

  6.   

    好方法。。以前去查MSDN,里面说的就是新开进程重启设置权限。
      

  7.   


    QQ安全更新,搜狗拼音更新也是每次都弹UAC。当然你也可以把升级功能做成服务,但是服务不能弹出界面,需要设计前台程序和服务的通信机制。前台程序把数据传给服务,让服务去写入需要权限的地方。也可以是前台程序把升级文件保存到普通权限的临时目录,然后发消息给服务,让服务完成最终的写入。