0

我创建了一个简单的 Windows 应用程序,以及它的安装程序(Setup project)。

因为我想在安装后自动启动应用程序,所以我在 Installer.cs 中添加了这个脚本

public override void Commit(System.Collections.IDictionary savedState)
{
    string appPath = Context.Parameters["AssemblyPath"].ToString();
    System.Threading.Thread.Sleep(500);
    System.Diagnostics.Process.Start(appPath, "2");
}

应用程序启动完美,但它以SYSTEM user.

在此处输入图像描述

我希望自动启动的应用程序在Default user打开 MSI 的地方运行。

4

3 回答 3

2

之前有一个问题询问如何在安装后启动应用程序。不幸的是,标记为已接受答案的答案链接到与您已经拥有的基本相同的代码项目文章 - 正如您所注意到的,它具有可能在错误帐户下运行应用程序的缺点。

Peter Kelly 的回答链接到Aaron Stebner 博客上的一篇文章,其中详细介绍了一种更正确的方法 - 您需要在 Install Execute 序列中添加一个操作,以便在安装完成启动可执行文件。他包含一个脚本来对已构建的 msi 文件执行必要的更改。

使用其他安装程序技术(Wix、Installshield 等),可能有一些方法可以直接在安装程序项目中进行配置。没有办法使用 Visual Studio 安装项目(除了使用 Aaron 的后期构建步骤)。另一个更喜欢避免 VS Setup 项目。

于 2012-05-22T10:10:23.240 回答
1
  • 从评论中,我很确定您有一个引导程序,它在开始时提升,然后您的安装运行提升。最后,当您启动应用程序时,它会继承执行上下文。
  • 另一种可能性是您以延迟的自定义操作而不是立即的自定义操作来启动您的应用程序。立即自定义操作始终在当前用户的上下文中运行,而延迟操作通常在系统上下文中运行,因为它们应该对系统进行更改,而不是立即自定义操作。

没有更多细节,很难说为什么您的应用程序在系统上下文中启动。

简而言之,您必须在安装开始时保存当前用户的上下文,在系统上下文中运行安装本身,然后在安装完成后,在原始用户的上下文中启动您的应用程序。

有关此方法的更多详细信息,请参阅从 UAC 管理员级别进程以降低的权限启动进程

于 2012-05-22T07:39:49.600 回答
0

我从这篇文章中得到了解决方案

启动 Windows 服务并启动 cmd

这解决了我的SYSTEM用户问题

于 2012-05-25T11:32:07.307 回答