执行wix msi自定义操作作为系统

时间:2017-08-16 13:49:23

标签: wix windows-installer

我正在使用WIX构建一个MSI,它将作为普通用户执行但具有系统权限(AlwaysInstallElevated = 1)。我已经定义了两个执行net.exe的自定义操作 net.exe命令不会以普通用户身份执行。我还测试了以管理员身份执行此msi并且net.exe命令正在执行 我已经记录了msi输出,我看到错误代码让我相信net.exe命令没有被提升执行。我正在联系社区,看看是否

  1. 我想做的事情是可能的
  2. 我是否需要使用exe作为自定义操作,以便exe安装提升。
  3. 提前感谢您的反馈。

    <CustomAction Directory="TARGETDIR" ExeCommand="[SystemFolder]net.exe user TestUser /add" Return="ignore" Execute="deferred" HideTarget="no" Impersonate="no" Id="Command1">Command1</CustomAction>
    <CustomAction Directory="TARGETDIR" ExeCommand="[SystemFolder]net.exe localgroup Administrators TestUser /add" Return="ignore" Execute="deferred" HideTarget="no" Impersonate="no" Id="Command2">Command2</CustomAction>
    <InstallExecuteSequence>
        <Custom Action="Command1" After="PublishProduct">NOT Installed</Custom>
        <Custom Action="Command2" After="Command1">NOT Installed</Custom>
    </InstallExecuteSequence>
    

    计算机策略和用户策略允许将msis作为系统执行。

    MSI (c) (DC:F8) [09:17:39:438]: Machine policy value 'AlwaysInstallElevated' is 1
    MSI (c) (DC:F8) [09:17:39:438]: User policy value 'AlwaysInstallElevated' is 1
    MSI (c) (DC:F8) [09:17:39:438]: Running product '{34ED8E61-40EA-47CE-95E7-8EE3CDBCB1E8}' with elevated privileges: All apps run elevated.
    

    错误

    MSI (s) (8C:8C) [20:39:18:989]: Executing op: ActionStart(Name=Command1,,)
    MSI (s) (8C:8C) [20:39:18:989]: Executing op: CustomActionSchedule(Action=Command1,ActionType=3170,Source=C:\,Target=C:\WINDOWS\SysWOW64\net.exe user TestUser /add,)
    CustomAction Command1 returned actual error code 2 but will be translated to success due to continue marking
    MSI (s) (8C:8C) [20:39:19:535]: Executing op: ActionStart(Name=Command2,,)
    MSI (s) (8C:8C) [20:39:19:535]: Executing op: CustomActionSchedule(Action=Command2,ActionType=3170,Source=C:\,Target=C:\WINDOWS\SysWOW64\net.exe localgroup Administrators TestUser /add,)
    CustomAction Command2 returned actual error code 1 but will be translated to success due to continue marking
    

2 个答案:

答案 0 :(得分:0)

即使在管理员启动的安装中,模拟的自定义操作也会在没有提升的情况下运行。所以答案就是你的号码2.从具有CreateProcess类型的启动的提升过程开始安装。话虽如此,我不清楚为什么你不能运行没有假冒的CA延迟,因为似乎没有什么要求用户是实际用户而不是系统帐户。所以失败可能不是提升,这就是将任务传递给一个不会给你带来好错误信息的程序的问题。所以....

我已经看过样板代码来做这种事情,我相信WiX还有它,Util用户元素,这可能是要走的路。

答案 1 :(得分:0)

Phil 所说,不要使用 net.exe 来创建用户。使用WiX的内置功能(我应该找到一个更好的样本,但现在没有时间):

我的第一直觉是 AlwaysInstallElevated 策略配置错误,但从日志文件判断它是否正确设置。我生锈了,但模仿看起来正确设置为&#34; 没有&#34;的菲尔?并且延迟延期,并且看似恰好位于InstallFinalize之前 - 似乎还不错。

是否 net.exe 无法正常运行 LocalSystem ?为什么当安装程序以管理员身份启动时它会起作用?人们会认为LocalSystem具有所有必需的权限。是不是以某种方式附加到msiexec.exe进程的当前用户的访问令牌? (用于记录目的或某事)。或者,管理员帐户是否具有LocalSystem不具有的权限?如果没有假冒,这个特权会如何适用?您是否尝试以常规用户手动启动net.exe?在以普通用户身份运行时尝试创建用户时会出现什么错误?

在任何一种情况下,如果有替代方案,我都不会浪费时间运行EXE自定义操作。我上次不记得了。我通常使用VBScript,C ++和早期的我使用Installscript - 以及其所有古老的语法。 只需切换到内置的WiX构造,你就可以了。