我正在 Visual Studio 2010 中使用 C# Outlook 加载项 (Office 2010/2013) 和其他独立工具的安装项目。在安装过程中,我杀死了所有 Outlook 实例,然后我想重新启动 Outlook 实例。
在我的插件项目中,我添加了一个安装程序类并添加了一个 InstallEventHandler(AfterInstallEventHandler) 在其中执行
Process.Start("Outlook");
虽然同一命令只是在其他编译类中打开 Outlook,但在安装程序的上下文中,Outlook 在配置文件创建助手中打开。
我还尝试在提交后将工作编译的 exe 作为用户定义的操作运行,但出现了同样的问题。
任何解决方案或解释将不胜感激。
解决方案:
安装在 SYSTEM 帐户中运行。因此,创建的进程也在所述帐户中运行,而不是作为当前登录的用户运行。
我创建了一个附加项目(InstallHelper),其中包括
Process.Start("Outlook");
我在安装项目中将 InstallHelper 添加为 Commit 上的 CustomAction,并在 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(msidb自定义操作类型提交)
- 0x12(自定义操作类型 18:exe)
1554:
- 0x400(msidbCustomActionTypeInScript)
- 0x200(msidb自定义操作类型提交)
- 0x12(自定义操作类型 18:exe)
See:
MSDN:自定义操作脚本内执行选项 http://msdn.microsoft.com/en-us/library/Aa368069.aspx
类型更改删除了 msidbCustomActionTypeNoImpersonate (0x00000800) 位,因此 InstallHelper 和创建的进程以登录用户身份运行,而不是以 SYSTEM 身份运行。
或者,可以通过在 orca 中打开 msi 来进行这些更改(必须在每次构建后重复,所以我更喜欢脚本化更改)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)