如何在部署后摆脱UAC提示

时间:2015-05-06 14:27:47

标签: c# wpf deployment wix uac

我编写了一个非常小的应用程序,并且正在努力为我的解决方案创建一个良好的部署项目。它是一个wpf应用程序,它访问数据库,重新格式化一些数据,将其呈现给用户并将其写为XML,具体取决于用户选择另一个应用程序继续工作。一切都非常好。

但是...

当我创建InstallShield LE项目并进行部署时,我可以在没有UAC提示的情况下运行应用程序。

当我创建一个WiX项目并进行部署时,我在安装和运行已安装的应用程序时都会收到UAC提示。每次。

我搜索过,搜索并询问周围没有可行的解决方案。

有任何建议吗?

2 个答案:

答案 0 :(得分:3)

您需要展示一些WiX源并查看该应用程序。

安装本身没有理由影响应用程序的行为。如果应用程序包含高程清单,则会要求提升,并且requireAdministrator(或highestAvailable)的请求执行级别将负责UAC提示。清单通常嵌入在可执行文件中,显然IS或WiX都不会在安装时更改exe的内容。

所以对于应用程序:

  1. 您的应用构建在两个方案中可能有所不同,一个包含嵌入式清单,另一个不包含嵌入式清单。如果使用Visual Studio将exe作为文件打开,您可能会看到一个RT_MANIFEST节点,该节点显示嵌入式清单及其高程要求。

  2. 构建可能会有所不同,因为WiX会包含一个外部应用程序清单文件,该文件会在应用程序运行时导致提升提示。

  3. 如果用户是管理员(highestAvaIlable),您可能会有一个提升,因此管理员会收到提示,有限用户则不会。所以不同的用户会看到不同的行为。

  4. Difference between "highestAvailable" and "requireAdministrator" in manifest in terms of Elevation?

    对于安装本身:

    1. InstallShield设置可能是每个用户(不需要提升),WiX是每台机器,或者至少WiX的InstallPrivileges是提升的,默认情况下或者因为它在Package元素中是显式的。

答案 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您想要提升。