我编写了一个非常小的应用程序,并且正在努力为我的解决方案创建一个良好的部署项目。它是一个wpf应用程序,它访问数据库,重新格式化一些数据,将其呈现给用户并将其写为XML,具体取决于用户选择另一个应用程序继续工作。一切都非常好。
但是...
当我创建InstallShield LE项目并进行部署时,我可以在没有UAC提示的情况下运行应用程序。
当我创建一个WiX项目并进行部署时,我在安装和运行已安装的应用程序时都会收到UAC提示。每次。
我搜索过,搜索并询问周围没有可行的解决方案。
有任何建议吗?
答案 0 :(得分:3)
您需要展示一些WiX源并查看该应用程序。
安装本身没有理由影响应用程序的行为。如果应用程序包含高程清单,则会要求提升,并且requireAdministrator(或highestAvailable)的请求执行级别将负责UAC提示。清单通常嵌入在可执行文件中,显然IS或WiX都不会在安装时更改exe的内容。
所以对于应用程序:
您的应用构建在两个方案中可能有所不同,一个包含嵌入式清单,另一个不包含嵌入式清单。如果使用Visual Studio将exe作为文件打开,您可能会看到一个RT_MANIFEST节点,该节点显示嵌入式清单及其高程要求。
构建可能会有所不同,因为WiX会包含一个外部应用程序清单文件,该文件会在应用程序运行时导致提升提示。
如果用户是管理员(highestAvaIlable),您可能会有一个提升,因此管理员会收到提示,有限用户则不会。所以不同的用户会看到不同的行为。
Difference between "highestAvailable" and "requireAdministrator" in manifest in terms of Elevation?
对于安装本身:
答案 1 :(得分:0)
向可执行文件添加程序集清单,告知Windows您希望它运行 asInvoke :
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="Contoso.Frobber"
type="win32"
/>
<description>Frobber Thingy Majiggy</description>
<!-- Disable file and registry virtualization -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
这告诉Windows您不想要提升。