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

问题描述:

我正在使用WIX构建将作为常规用户执行但具有系统特权(AlwaysInstallElevated = 1)的MSI。我定义了两个执行net.exe的自定义操作。
net.exe命令不会像常规用户那样执行。我还测试了以管理员身份执行此msi并且net.exe命令正在执行。
我已经记录了msi输出,并且看到了导致我相信net.exe命令没有被执行的错误代码。我深入到社区,看是否作为系统执行wix msi自定义操作

  1. 我试图做的是可能
  2. 我是否需要改用exe文件作为自定义操作,以便将EXE安装升高。

在此先感谢您的反馈意见。

<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.从具有CreateProcess类型的启动的升级过程开始安装。话虽如此,我不清楚为什么你无法运行CA,因为似乎没有任何事情要求用户成为实际用户而不是系统帐户。所以失败可能不是提升,这就是将任务传递给一个不会给你提供良好错误信息的程序的问题。所以......

我已经见过样板代码来做这种事情,我相信无论如何,WiX都有它,Util User元素,这可能是要走的路。

+0

菲尔,这些结果对我来说没有意义。我认为CA被设置为延期并且冒充为“否”。一定还有其他的错误。无论哪种情况,他都应该切换到WiX的内置功能。 –

+0

斯坦因,这篇文章建议(在第2点)改变自定义操作来运行他们模仿和提升,因为他们不工作。我的回答只是说我没有理由不按规定工作,因此问题可能不仅仅是提升要求。所以我同意你的看法,因为这就是我所说的,但也许我错过了你评论的地方。 – PhilDW

Like 菲尔说,不要用net.exe来创建用户。使用维克斯的内置功能来做到这一点(我应该已经找到了更好的样本,但没有时间现在):

我的第一个本能的反应会是, AlwaysInstallElevated策略将被错误配置,但从日志文件判断它设置正确。我很生疏,但模仿看起来像它被正确设置为“没有菲尔?而日程安排推迟和似乎安置在InstallFinalize之前 - 似乎可以在我的头顶。

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

在这两种情况下,如果有其他选择,我不会浪费时间运行EXE自定义操作。我不记得我最后一次。我通常使用VBScript,C++和更早的版本,我使用了Installscript - 以及其所有陈旧的语法。 只需切换到内置的WiX结构,你应该没问题。