需要在没有UAC弹出窗口的情况下提升权限

我有一个应用程序,它是另一个应用程序(我的主要应用程序)的启动器。 启动器进入FTP服务器,下载更新并安装它们。 但是,更新可执行文件需要将一些DLL和EXE复制到主应用程序的安装目录中,该目录位于Program Files中。 因此,我目前需要提升更新程序的权限。

这是一个问题,因为我的应用程序在启动时启动,并且通常只会加载到系统托盘(该应用程序与messenger / skype相当)。 如果我在尝试“静默”更新应用程序时开始在屏幕上弹出UAC警告,那就不再那么沉默了。

我现在看到的唯一避免问题的方法是给所有用户授予程序文件安装目录的权限,但我不愿意这样做。 还有其他想法吗?

我使用的是Windows 7,应用程序使用的是C#。

这样做会违反用户访问控制的基本原则。

根据设计,无法在避免提示的同时提升权限。 如果有办法做到这一点,UAC将变得毫无用处。


话虽这么说,你可以尝试围绕这个问题进行设计。 您可能需要考虑制作一个执行更新的Windows服务,而不是使您的程序成为启动/系统托盘应用程序。 这可以作为管理员在启动时运行(而不是登录),并且它已经以提升的权限运行。

如果您需要系统托盘应用程序,它可能是一个与服务“对话”的独立应用程序。

UAC的重点是,未经用户批准,应用程序无法进行更改。 您可以简单地让用户知道更新是否可用,而不是尝试自动更新您的应用,并等待他们要求更新(此时会有UAC提示,因为许多应用都会更新这条路)。

正如其他人所说UAC是为了防止这种行为,但是你可以禁用UAC然后启用UAC安装后,因为我假设你的“用户”是你公司的本地用户。 您可以将其推送到批处理文件并使用psexec执行它,因为我相信您可以远程执行此操作而无需在客户端计算机上安装任何内容。

禁用UAC

C:\Windows\System32\cmd.exe /k %windir%\System32\reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f 

启用UAC

 C:\Windows\System32\cmd.exe /k %windir%\System32\reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 1 /f