Dah*_*Sra 22 installer impersonation wix elevated-privileges wix3.7
我是wix安装程序的新手.我已经为我的应用程序使用wix安装程序开发了一个设置,我需要执行自定义操作以在cmd.exe中运行命令.在XP中它工作正常.但在Windows 8和7中,cmd提示符需要以管理员身份运行.
我用Google搜索并发现关键字Elevated Privileges和impersonate可能对我有所帮助.
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" InstallPrivileges="elevated"></Package>
Run Code Online (Sandbox Code Playgroud)
如上所示,我使用了设置为perMachine的InstallScope属性,并且我在CustomAction元素中使用了Impersonate ="No":
<CustomAction Id='comReg' Directory='INSTALLLOCATION' Impersonate='no'
ExeCommand='"[NETFRAMEWORK40CLIENTINSTALLROOTDIR]regasm.exe" "[INSTALLLOCATION]myProduct.dll" /codebase' Return='check' />
Run Code Online (Sandbox Code Playgroud)
但是在安装时我没有得到任何改变.我需要命令提示符以管理员模式打开并运行上述命令.
任何人都可以告诉我这些关键词" 提升权限和模仿"
<InstallExecuteSequence>
<Custom Action='comReg' After='InstallFinalize'>NOT REMOVE</Custom>
<Custom Action='comUnreg' Before='RemoveFiles'>REMOVE</Custom>
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)
怎么做?
tjl*_*igh 37
此属性指定在执行此自定义操作时,作为LocalSystem执行的Windows Installer是否应模拟安装用户的用户上下文.通常,该值应为"是",除非自定义操作需要提升权限以将更改应用于计算机.
您还需要了解延迟和立即自定义操作之间的区别.请参阅同一帮助页面上的Execute属性:
此属性指示自定义操作的计划.此属性的值必须是以下之一:
deferred 表示自定义操作在脚本中运行(可能具有提升的权限). immediate 表示自定义操作将在具有用户权限的正常处理时间内运行.这是默认值.
目前,您的自定义操作是立即执行的,这意味着它以用户权限运行.有关详细信息,请参阅此博客文章,但特别是:
任何立即的自定义操作都会模拟调用用户.在Windows Vista之前,这不是问题,因为此时安装管理用户有一个特权令牌.通过在Windows Vista中引入UAC,启用了UAC的默认管理令牌是已过滤的令牌,并且不具有所有权限.由于立即自定义操作不应该修改机器状态 - 仅收集状态数据并安排自定义操作以延迟运行 - 这仍然不应该是一个问题.毕竟,此时安装和回滚脚本的生成应该是所有应该进行的.
您永远不应该使用立即自定义操作来修改计算机状态.使用延迟的,并将模拟保持为否,它应该工作:
<CustomAction Id='comReg' Directory='INSTALLLOCATION' Execute='deferred' Impersonate='no' ExeCommand='"[NETFRAMEWORK40CLIENTINSTALLROOTDIR]regasm.exe" "[INSTALLLOCATION]EAWordImporter.dll" /codebase' Return='check' />
Run Code Online (Sandbox Code Playgroud)
编辑:使用InstallExecuteSequence元素计划自定义操作:
<InstallExecuteSequence>
<Custom Action='comReg' Before='InstallFinalize'/>
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
28127 次 |
最近记录: |