我正在构build一个允许在我们的模拟器中安装应用程序的工具,它被称为“cl-install.exe”。 它确实不需要任何pipe理员权限来运行。 但是Windows 7总是popup一个对话框,要求用户在命令提示符下调用此命令时提供pipe理员权限。
如果我将相同的可执行文件重命名为其他名称,而没有“安装”或“设置”一词,则Windows不会要求pipe理员权限。
有什么办法可以防止Windows这样做,而不重命名我的可执行文件?
这是Windows Vista和更高版本中的启发式技术的一部分。 如果文件中包含“安装”,“设置”或“更新”等字样,则假定安装程序。
您可以通过将以下内容添加到清单来防止这种情况
<requestedExecutionLevel level="asInvoker" />
如果我没有记错的话,可以用下面的方法禁用这个行为(引自Technet ):
单击开始 , 所有程序 , 附件 ,单击运行,在打开文本框中,键入secpol.msc ,然后单击确定 。
在“ 本地安全设置”控制台树中,单击“ 本地策略” ,然后单击“ 安全选项” 。
向下滚动并双击用户帐户控制:检测应用程序安装并提示输入高程 。
选择禁用选项,然后单击确定 。
关闭本地安全设置窗口。
您可能需要重新登录才能使设置生效。
我在这里找到了一个可行的解决方案: 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拾取新的清单文件。