如何在asp.net web应用程序中启动新进程

如何在asp.net web应用程序中启动新进程,asp.net,windows,process,Asp.net,Windows,Process,我们web服务器上的默认浏览器是IE。我们需要在一个web应用程序上单击按钮启动一个Chrome实例 我已经编写了一个asp.net测试应用程序,试图实现上述目标。在测试应用程序中,我启动一个进程,点击服务器端的按钮启动Chrome,但Chrome窗口不会出现。当我得到进程ID并且haseExited属性为false时,进程似乎开始得很好。然而,屏幕上没有显示任何内容,我似乎无法在进程列表中找到进程 我知道,在web应用程序中,进程在asp.net工作进程的上下文中启动,它无权访问桌面,并且具有

我们web服务器上的默认浏览器是IE。我们需要在一个web应用程序上单击按钮启动一个Chrome实例

我已经编写了一个asp.net测试应用程序,试图实现上述目标。在测试应用程序中,我启动一个进程,点击服务器端的按钮启动Chrome,但Chrome窗口不会出现。当我得到进程ID并且haseExited属性为false时,进程似乎开始得很好。然而,屏幕上没有显示任何内容,我似乎无法在进程列表中找到进程

我知道,在web应用程序中,进程在asp.net工作进程的上下文中启动,它无权访问桌面,并且具有受限权限。因此,我授予IIS管理服务进程与本地计算机上的桌面交互的权限(通过进程窗口)。此外,在代码中,我尝试使用自己的用户帐户启动该进程,该帐户具有本地计算机的管理员访问权限,但仍然无法使Chrome窗口显示在屏幕上

我的服务器端代码如下:

var psi = new ProcessStartInfo
{
    FileName = @"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe",
    Arguments = "http://www.msn.com",
    CreateNoWindow = false,
    UseShellExecute = true
    UserName = "username",
    Password = "secure password",
    Domain = "domain"
};
var process = new Process
{
    StartInfo = psi
};
var result = process.Start(); // result is true
int processId = process.Id; // processId is valid

非常感谢您的帮助。

您的要求有问题。您肯定不想在服务器上作为IIS进程的子进程启动web浏览器。因为这就是从ASP.NET启动进程时发生的情况。这意味着进程将在名为“会话0”的不可见桌面上运行。登录到服务器的用户将无法访问它,并且肯定不会在客户端计算机上启动它。如果web应用程序可以在客户端上启动任意可执行文件,那将是一个巨大的安全问题。因此,请将您的要求“我需要启动web浏览器”转换为您实际需要的内容。嗨,CodeCaster,谢谢您提供的非常有用的信息。我不知道会话0桌面。但我不知道你翻译我的要求是什么意思。我的要求是能够启动一个按钮点击铬。那么你会提出什么解决方案呢?在哪里发布Chrome?如果从ASP.NET启动,它将在服务器上不可见地运行。你为什么要这么做?如果你想在客户机上启动它,你不能这样做。再说一次,你为什么要这么做呢?CodeCaster,原因很难解释。正如我所说,我们的默认浏览器是IE,我们无法更改它。我们的部分业务正在使用一些新的D365应用程序。这些应用程序的某些部分在IE上运行时会出现问题,因此我们目前唯一的解决方案是启动Chrome来访问这些部分。至于在哪里启动,它将在客户端和服务器上启动。你问我为什么我们要这样做,但没有提出替代方法。另一种方法是在客户端启动Chrome,但它会出现一个ActiveX对话框,我认为我们的it团队不喜欢禁用它。我没有给你任何解决方法,因为没有。如果没有浏览器插件(例如ActiveX控件,您肯定不想使用),您无法在客户端启动任意进程。如果你需要采取某种行动在你的公司网络上发布Chrome,你需要与你的IT团队讨论
Process.Start()
在web服务器上启动进程。