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

Fre*_*ein 5 c# setup-project visual-studio-2010 outlook-2013

我在visual studio 2010中使用了一个安装项目,用于ac#outlook插件(Office 2010/2013)和另一个独立工具.在安装过程中,我终止了所有outlook实例,之后我想重新启动一个outlook实例.

在我的addin项目中,我添加了一个installerclass并添加了一个InstallEventHandler(AfterInstallEventHandler),我在其中执行

Process.Start("Outlook");
Run Code Online (Sandbox Code Playgroud)

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

我还尝试在提交后将所述工作编译的exe作为用户定义的操作运行,但同样的问题也会发生.

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

Fre*_*ein 5

解:

安装以SYSTEM帐户运行。因此,创建的过程也以所述帐户而不是当前登录用户的身份运行。

我创建了一个附加项目(InstallHelper),其中包括

Process.Start("Outlook");
Run Code Online (Sandbox Code Playgroud)

我在安装项目中将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"
Run Code Online (Sandbox Code Playgroud)

3602:

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

1554年:

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

请参阅: msdn:自定义操作脚本内执行选项

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

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