为什么Windows要求系统pipe理员权限来运行带有“install”的可执行文件?

我正在构build一个允许在我们的模拟器中安装应用程序的工具,它被称为“cl-install.exe”。 它确实不需要任何pipe理员权限来运行。 但是Windows 7总是popup一个对话框,要求用户在命令提示符下调用此命令时提供pipe理员权限。

如果我将相同的可执行文件重命名为其他名称,而没有“安装”或“设置”一词,则Windows不会要求pipe理员权限。

有什么办法可以防止Windows这样做,而不重命名我的可执行文件?

这是Windows Vista和更高版本中的启发式技术的一部分。 如果文件中包含“安装”,“设置”或“更新”等字样,则假定安装程序。

您可以通过将以下内容添加到清单来防止这种情况

<requestedExecutionLevel level="asInvoker" /> 

如果我没有记错的话,可以用下面的方法禁用这个行为(引自Technet ):

  1. 单击开始所有程序附件 ,单击运行,在打开文本框中,键入secpol.msc ,然后单击确定

  2. 在“ 本地安全设置”控制台树中,单击“ 本地策略” ,然后单击“ 安全选项”

  3. 向下滚动并双击用户帐户控制:检测应用程序安装并提示输入高程

  4. 选择禁用选项,然后单击确定

  5. 关闭本地安全设置窗口。

您可能需要重新登录才能使设置生效。

我在这里找到了一个可行的解决方案: https : //github.com/bmatzelle/gow/issues/156

引用:

解决方案是为可执行文件编写下面列出的清单文件,以说服UAC不需要管理权限。

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <!-- Make sure that UAC believes that it does not require administrative privilege --> <requestedExecutionLevel level="asInvoker" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> </assembly> 

清单文件的文件名应该是install.exe.manifest和patch.exe.manifest,然后将它们放在与install.exe和patch.exe相同的文件夹中。

如果仍然弹出UAC提示符,请更改install.exe和patch.exe的时间戳以说服Windows拾取新的清单文件。