Visual Studio 安装项目:以当前用户而不是系统帐户运行 CustomActions/process

问题描述 投票:0回答:2

我正在 Visual Studio 2010 中使用 C# Outlook 加载项 (Office 2010/2013) 和其他独立工具的安装项目。在安装过程中,我杀死了 Outlook 的所有实例,然后我想重新启动 Outlook 的一个实例。

在我的插件项目中,我添加了一个安装程序类并添加了一个 InstallEventHandler(AfterInstallEventHandler) 在其中执行

Process.Start("Outlook");

虽然相同的命令只是在其他编译类中打开 Outlook,但在安装程序的上下文中,Outlook 在配置文件创建助手中打开。

我还尝试在提交后将工作编译的 exe 作为用户定义的操作运行,但出现了同样的问题。

任何解决方案或解释将不胜感激。

c# visual-studio-2010 setup-project outlook-2013
2个回答
5
投票

解决方案:

安装在 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(msidbCustomActionTypeCommit)
  • 0x12(自定义操作类型 18:exe)

1554:

  • 0x400(msidbCustomActionTypeInScript)
  • 0x200(msidbCustomActionTypeCommit)
  • 0x12(自定义操作类型 18:exe)

参见: MSDN:自定义操作脚本内执行选项

类型更改删除了 msidbCustomActionTypeNoImpersonate (0x00000800) 位,因此 InstallHelper 和创建的进程以登录用户身份运行,而不是以 SYSTEM 身份运行。

或者,可以通过在 orca 中打开 msi 来进行这些更改(每次构建后都必须重复,所以我更喜欢脚本化更改)。


2
投票

除了之前的答案(我花了很多时间来理解这一点):

我的 WiRunSql.vbs 文本: (对于您来说,它还包含 argument2-update 脚本参数)

(对我来说 PostBuildevent 是

@echo off
cscript //nologo "$(ProjectDir)WiRunSql.vbs" "$(BuiltOuputPath)"

Dim filename, installer, database
filename = WScript.Arguments(0)
Set installer = CreateObject("WindowsInstaller.Installer")
Set database = installer.OpenDatabase(filename, 1)
sql = "UPDATE `CustomAction` SET `Type`= 1554 WHERE `Type`= 3602"
Set view = database.OpenView(sql)
view.Execute
view.Close
database.Commit

您可以在命令提示符中测试您的脚本:

cscript "C:\Projects\YourProject\WiRunSql.vbs" "C:\Projects\YourProject\Debug\Setup.msi"

这需要在脚本中查找错误

要查看新的类型值,您可以使用 orca https://support.microsoft.com/en-us/kb/255905

还看: http://www.codeproject.com/Articles/383481/Editing-an-MSI-Database http://integr8consulting.blogspot.ru/2012/04/microsoft-installer-custom-actions-user.html https://github.com/facebookarchive/ie-toolbar/blob/master/Common/Install/msi/FBIE-MSI/scripts/msipostbuild.vbs

© www.soinside.com 2019 - 2024. All rights reserved.