解决方案:
安装在 SYSTEM 帐户中运行。因此,创建的进程也在所述帐户中运行,而不是以当前登录的用户身份运行。
我创建了一个额外的项目(InstallHelper),其中包括
Process.Start("Outlook");
我在我的安装项目中将 InstallHelper 添加为 CustomAction on Commit,并在 CustomAction 的属性中将 InstallerClass 更改为 False。然后我将 WiRunSql.vbs 复制到项目文件夹中,并将 PostBuildEvent 添加到安装项目中:
@echo off
cscript //nologo "$(ProjectDir)WiRunSql.vbs" "$(BuiltOutputPath)" "UPDATE CustomAction SET Type=1554 WHERE Type=3602"
3602:
- 0x800 (msidbCustomActionTypeNoImpersonate)
- 0x400 (msidbCustomActionTypeInScript)
- 0x200 (msidbCustomActionTypeCommit)
- 0x12(自定义操作类型 18:exe)
1554:
- 0x400 (msidbCustomActionTypeInScript)
- 0x200 (msidbCustomActionTypeCommit)
- 0x12(自定义操作类型 18:exe)
请参阅:
msdn:自定义操作脚本内执行选项
类型更改删除了 msidbCustomActionTypeNoImpersonate (0x00000800) 的位,因此 InstallHelper 和创建的进程作为登录用户运行,而不是作为 SYSTEM。
或者,可以通过在 orca 中打开 msi 来进行这些更改(必须在每次构建后重复,所以我更喜欢脚本更改)。