【问题标题】:Application process after msi installer finished is started as SYSTEM user name which sometimes can not create com objectmsi安装程序完成后的应用程序进程以SYSTEM用户名启动,有时无法创建com对象
【发布时间】:2012-11-21 09:59:15
【问题描述】:

我有一个安装 C# 应用程序的 Visual Studio 安装程序项目,我有一个自定义操作和代码来在安装完成后运行该过程。

假设Windows机器上的登录用户是“john”。现在当 john 运行 msi 安装程序时,我检查了任务管理器中的进程,它显示 msiexec.exe 是安装程序的进程名称,它以用户“john”的身份运行

安装程序完成并运行安装应用程序的进程 myapp.exe 现在,当我在 Windows 的任务管理器中检查此进程时,它显示 myapp.exe 正在以 SYSTEM 身份运行(我知道那是什么帐户以及为什么它不以约翰)

问题 当 myapp.exe 以 SYSTEM 用户身份运行时,它无法创建已经以用户 john 身份运行的组件(在我的情况下为 iTunes)的 com 组件实例。如果组件没有运行,则创建iTunes实例成功,否则失败。

问题 那么是否可以确保安装程序何时以 john 身份运行,当它完成时它以 john 而不是 SYSTEM 用户身份启动进程 myapp.exe ?请注意,我在安装过程中不会要求用户输入密码。

安装程序完成时我运行的代码

    // Event handler for 'Committed' event.
    private void MyInstaller_Committed(object sender, InstallEventArgs e)
    {
        try
        {                
            Directory.SetCurrentDirectory(Path.GetDirectoryName
            (Assembly.GetExecutingAssembly().Location));
            Process.Start(Path.GetDirectoryName(
              Assembly.GetExecutingAssembly().Location) + "\\MyApp.exe");
        }
        catch
        {
            // Do nothing... 
        }
    }

【问题讨论】:

  • 您的问题解决了吗?如果是这样,愿意发布解决方案吗?
  • 我做了,是的,但不记得让我检查我的代码,然后会给你我的解决方案

标签: c# windows visual-studio-2010 windows-installer setup-project


【解决方案1】:

这很可能是因为您正在延迟运行自定义操作。即它默认在 SYSTEM 用户帐户下运行。

解决方案是确保立即启动它,例如,您可以使用安装最后一个对话框中的“完成”按钮上的已发布事件启动它。我不确切知道如何在 VS 设置项目中添加已发布的事件,或者是否可以,但您可以轻松地在使用专门的 setup authoring tools 构建的包中添加一个。

【讨论】:

    【解决方案2】:

    在 Form_Load 事件中这样写:

    字符串 lUserName=Environment.GetEnvironmentVariable("USERNAME");

    那么您将在安装 MSI 时获得 windows 登录用户名,而不是获取系统用户帐户。

    【讨论】:

      【解决方案3】:

      就我个人而言,我确实设法通过运行explorer.exe 来解决这个问题,该参数化为我的应用程序可执行文件的路径:

      Process.Start(
          new ProcessStartInfo
          {
              FileName = "explorer.exe",
              Arguments = Context.Parameters["target"],
              UseShellExecute = true
          });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-03
        • 1970-01-01
        • 2011-01-03
        • 1970-01-01
        • 2011-01-17
        • 1970-01-01
        • 1970-01-01
        • 2018-08-05
        相关资源
        最近更新 更多