【问题标题】:Running install process from c# wpf application从 c# wpf 应用程序运行安装过程
【发布时间】:2016-04-04 02:34:51
【问题描述】:

在我的 C# WPF 应用程序中,我正在检查是否需要安装新版本。如果是这样,我想中断当前进程并启动安装程序。安装程序是使用 NSIS 包开发的。 问题是有时只出现来自 NSIS 安装程序的用户帐户控制对话框并且安装过程中断。

如何保证每次都执行安装过程?

这是我的应用程序启动代码。

protected override void OnStartup(StartupEventArgs e)
    {
        try
        {
            //Disable shutdown when the dialog closes
            Current.ShutdownMode = ShutdownMode.OnExplicitShutdown;

            if ( IfUpdateRequired())
            {
                System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(sessionCtx.AutoUpdateVersionInfo.SetupPath);
                //This should not block current program
                startInfo.UseShellExecute = true;  
                startInfo.Verb = "runas";
                System.Diagnostics.Process.Start(startInfo);
                this.Shutdown();
            }
            else
            {
                base.OnStartup(e);
            }
        }
        catch (Exception ex)
        {

        }
    }

【问题讨论】:

  • 你能不能加个“开始屏幕通知系统修改”的截图,因为我不太明白你在说什么。
  • 我的意思是“用户帐户控制对话框”。
  • “安装过程中断”时会发生什么?是否有任何错误消息或类似的东西?
  • 没有错误信息。

标签: c# process nsis


【解决方案1】:

我唯一的猜测是在您的进程退出之前子进程尚未完全启动。允许 ShellExecute 异步执行其操作。

如果这是原因,那么您应该能够通过在调用this.Shutdown() 之前先睡一会儿来解决它。等10秒左右吧?或在进程上致电WaitForInputIdle(9999)。或者您可以检查 Responding process 属性?

【讨论】:

  • 看来您的建议解决了问题。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多