【问题标题】:Process.Start() issue - No GUI displayedProcess.Start() 问题 - 不显示 GUI
【发布时间】:2013-11-11 16:21:27
【问题描述】:

我正在尝试从我的 VisualWebGUI(基本上是 web 上的 winforms)应用程序启动 WPF .exe。当我通过 VS2010 运行它时,一切正常。但是,当我将站点部署到 IIS 时,它确实启动了 .exe(我可以看到它写入日志文件),但它没有向我显示 WPF 应用程序的 GUI。我也可以在任务管理器中看到正在运行的进程!真的很简单的东西,只是通过一个论点:

Process p = new Process();
p.StartInfo.FileName = Security.ExePath
p.StartInfo.Arguments = ID
p.Start();

我试过摆弄不同的 startinfo 参数,但无济于事,我错过了什么吗?

【问题讨论】:

  • 当它在 IIS 中运行时,它不会显示在屏幕上。您的应用程序应用池将以不同的用户身份运行,因此当您启动新进程时,它将以该用户身份启动
  • 当您在 IIS 中运行时,您将作为“服务”运行。服务没有桌面。通过网页在服务器(IIS)上运行 .exe 不是一个好主意
  • 进一步说明:您的应用程序在开发过程中出现,因为 IIS 正在您的计算机上运行。当您将项目部署到服务器时,您的任何用户都将看到您启动的 WPF 应用程序,无论服务器配置如何。
  • 你想做什么?从 Web 应用程序启动进程很糟糕,尝试显示 GUI 在可扩展性方面更糟糕。此外,除非您以具有登录权限的帐户运行应用程序池(这是非常糟糕的),否则任何人都无法看到 UI
  • 感谢大家的cmets。长话短说,我们试图做的是在 VisualWebGUI 应用程序中捕获大量信息,然后以 WPF 形式向用户显示其中的一些数据。 WPF 有一些对该项目有用的控件。

标签: c# wpf process.start visual-web-gui


【解决方案1】:

这可能是因为应用程序是在 AppPool 身份下启动的(例如 ApplicationPoolIdentity)。尝试将 AppPool 的“高级设置”下的身份设置为已登录并应该看到应用程序的用户。

【讨论】:

  • 假设用户曾经登录到 Web 服务器并不是最安全的假设
  • 这是 OP 的问题。顺便说一句,为应用程序池使用具有提升凭据(例如本地登录)的帐户是一种等待发生的入侵
【解决方案2】:

您需要为您的进程指定适当的窗口站,以便它可以访问与当前 Windows 登录会话相同的 UI。

看这里:http://support.microsoft.com/kb/165194 并继续阅读有关 Windows API 的信息,例如:http://msdn.microsoft.com/en-us/library/windows/desktop/ms682429(v=vs.85).aspx

附带说明,从工作进程启动 GUI 是一个非常糟糕的主意 - 主要是因为您永远无法保证在任何时间点都存在任何交互式用户。当您使用 IIS 时,您的主要假设必须是没有人在看服务器屏幕。

您最好让您的 GUI 应用程序(或轻量级存根)在用户登录时自动启动,然后监听来自后台进程的信号。

【讨论】:

  • 更糟糕的是,他必须在本地授予应用程序池帐户的登录权限。这就像要求入侵
猜你喜欢
  • 2013-07-25
  • 2016-04-16
  • 1970-01-01
  • 2016-06-10
  • 2011-04-25
  • 2011-05-12
  • 2016-03-02
  • 2015-03-20
  • 1970-01-01
相关资源
最近更新 更多