C# 在桌面会话中从IIS运行进程/URI
我有一个ASP.NET web应用程序在IIS中运行。应用程序池和web应用程序都设置为以我创建的用户身份运行(不是NETWORKSERVICE)。此用户拥有所有正确的权限(如伪管理员) 应用程序使用磁铁URI调用C# 在桌面会话中从IIS运行进程/URI,c#,asp.net,iis,process,uri,C#,Asp.net,Iis,Process,Uri,我有一个ASP.NET web应用程序在IIS中运行。应用程序池和web应用程序都设置为以我创建的用户身份运行(不是NETWORKSERVICE)。此用户拥有所有正确的权限(如伪管理员) 应用程序使用磁铁URI调用Process.Start()。Web服务器上安装了一个应用程序,可以自动启动并开始处理磁铁URI。如果我在Web服务器的“运行”框中输入magnetic URI,那么一切都会按预期进行:应用程序启动并开始在后台处理URI。如果我在Visual Studio中调试应用程序,也会发生同样
Process.Start()
。Web服务器上安装了一个应用程序,可以自动启动并开始处理磁铁URI。如果我在Web服务器的“运行”框中输入magnetic URI,那么一切都会按预期进行:应用程序启动并开始在后台处理URI。如果我在Visual Studio中调试应用程序,也会发生同样的情况,因为IIS Express实例也在同一会话中运行,所以它可以正常工作
当我在IIS中从web应用程序调用进程时,它不会抛出任何异常或错误,但不会调用应用程序。我假设这是因为IIS正在应用程序所在的另一个会话中执行应用程序,因此应用程序无法响应URI调用,因此进程将退出
如何将这行代码更改为在与桌面会话相同的上下文中运行,以便应用程序能够适当地响应和处理URI
Process.Start("magnet:?xt=urn:btih:0123456789ABCDEF");
如果桌面会话不存在(例如,该用户尚未登录服务器),我希望抛出某种可捕获的异常,以便在网站上显示友好的错误。您可以尝试在服务器上创建专用的常规用户帐户,然后使用 以在该用户凭据下启动进程
另一个想法是,创建一个自托管WCF服务,并在登录的桌面用户会话下运行它。WCF服务将启动你的“磁铁:”应用程序。从ASP.NET代码调用WCF服务(通过
localhost
)。您可以尝试在服务器上创建专用的常规用户帐户,然后使用
以在该用户凭据下启动进程
另一个想法是,创建一个自托管WCF服务,并在登录的桌面用户会话下运行它。WCF服务将启动你的“磁铁:”应用程序。从ASP.NET代码调用WCF服务(通过localhost
)
ASP.NET网页和服务器控制代码在的上下文中执行
Web服务器上的ASP.NET工作进程。如果你用启动键
方法在ASP.NET网页或服务器控件中创建新进程
在具有受限权限的Web服务器上执行。过程
不会在与客户端浏览器相同的上下文中启动,也不会
可以访问用户桌面
当您在IIS 7+上使用Process.Start时,它将在中作为服务启动一个新进程,即使您使用相同的帐户登录服务器,您也无法与该会话进行任何交互。但是,您可以在任务管理器中看到正在运行的流程(显示来自所有用户的流程)
如果磁铁链接没有关联,那么可以将磁铁链接作为参数传递
Process.Start("C:\...\Torrent.exe", "magnet:?...")
如果关联的exe进程根本没有启动,请重定向其输出()并查看问题所在
一般来说,从Web应用程序运行外部进程不是一个好主意,您可以考虑一个计划任务或Windows服务,轮询一个公共存储库,以查看批作业是否应该运行并从那里执行应用程序。p> 例如:
FOR /F %%x IN (c:\\magnet.txt) DO START %%x
DEL /F c:\magnet.txt
Process.Start("C:\...\Torrent.exe", "magnet:?...")
如果关联的exe进程根本没有启动,请重定向其输出()并查看问题所在
一般来说,从Web应用程序运行外部进程不是一个好主意,您可以考虑一个计划任务或Windows服务,轮询一个公共存储库,以查看批作业是否应该运行并从那里执行应用程序。p> 例如:
FOR /F %%x IN (c:\\magnet.txt) DO START %%x
DEL /F c:\magnet.txt
在SO中回答了类似的问题:您可能会在事件日志中找到一些东西来解释出现了什么问题。关于从服务访问桌面的信息,一个类似的问题是。由于这是一件危险的事情(正如你可以想象的,并不是每个人都希望每个人都能从web客户端启动桌面应用程序…),所以设置起来可能会非常困难。另外,您正试图调用集成到Windows Shell(在Magnetor uri后面)的东西,这增加了诊断的复杂性(通常Shell会吃掉所有错误,以免干扰最终用户…)。第一件事:能否使用.exe路径而不是uri启动应用程序?赫尔