【问题标题】:Visual Studio setup project: run CustomActions/process as current user not system accountVisual Studio 安装项目:以当前用户而非系统帐户身份运行 CustomActions/process
【发布时间】:2016-04-13 16:21:19
【问题描述】:

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

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

Process.Start("Outlook");

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

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

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

【问题讨论】:

  • 您可以在 StackOverflow 上回答您自己的问题。我鼓励您编辑您的问题并将您找到的解决方案作为答案,以便将来帮助其他人。

标签: c# visual-studio-2010 setup-project outlook-2013


【解决方案1】:

解决方案:

安装在 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: Custom Action In-Script Execution Options

类型更改删除了 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多