我在Vista / 7上遇到UAC问题。我的安装程序使用UAC执行级别= requireAdministrator安装并运行我的应用程序。 App UAC执行级别= asInvoker。所以第一次由安装程序运行应用程序 - 它以管理员身份运行。然后,app创建一些文件来存储自身状态。稍后 - 如果用户启动应用程序,而不是管理员 - 应用程序只能读取已创建的文件,但无法覆盖它们..我尝试在应用程序清单中禁用UAC,或者在没有清单的情况下构建应用程序,但结果仍然相同 - 当app作为用户运行时,以管理员身份运行app时创建的每个文件都无法覆盖。我尝试了其他安装程序,如Inno Setup,但没有像我的问题......所以我的问题 - 为什么它发生在我的情况下,如何解决它?感谢。
P.S。重要笔记 实际上它不是安装人员。这是更新主应用程序可执行文件的实用程序。用于更新的主应用程序检查服务器(如果有) - 将更新下载到临时文件夹,然后启动具有提升权限的实用程序(http://www.codeproject.com/KB/vista-security/UAC__The_Definitive_Guide.aspx)以替换Program Files文件夹中的可执行文件。主应用程序在启动实用程序后终止。 2.所有文件应用程序都存储在ProgramData \ myAppName文件夹中。
答案 0 :(得分:1)
您的安装应用程序仅适用于当前用户还是机器上的所有用户?
对于每用户安装,安装程序在用户的AppData文件夹中创建初始应用程序状态是有意义的。 MSI运行每用户安装NON-elevated,因此AppData文件夹中的文件没有问题,您的应用程序无法修改。
对于每台计算机的安装,将任何内容放入特定用户的AppData文件夹或用户配置文件位置下的任何位置都没有意义。安装应用程序后,新用户可以登录计算机,并且没有任何内容。
那就是说,你有三个解决方案(实际上是两个解决方案和一个黑客):
(#3)是一个黑客,我不推荐它,因为你的应用程序会被新用户破坏,或者当用户在机器上重新创建他的个人资料时。
答案 1 :(得分:1)
如果不需要管理员权限,则不应启动主应用程序。你使用什么类型的安装程序?
MSI以当前用户权限运行,仅提升以更改系统。安装完成后,您可以启动主应用程序,它将作为当前用户运行,不提升。
如果您自定义setup.exe,则可以非升级启动安装程序。当需要安装文件时,启动另一个进程(可以是相同的可执行文件)来安装文件并进行系统范围的更改。完成此步骤后,您可以从初始过程中重新启动主应用程序。
或者,使用当前设置和更新程序运行升级的方法,按照How do I start a program as the desktop user from an elevated app上的说明启动主应用非提升。
注意:ProgramData的默认权限允许每个人创建文件和文件夹,但只有创建它们的用户才能修改文件(或管理员)。要解决这个问题,您有两种选择: