【发布时间】:2014-05-20 16:37:57
【问题描述】:
我有一个在 IIS 中运行的 ASP.NET Web 应用程序。应用程序池和 Web 应用程序都设置为作为我创建的用户(不是 NETWORKSERVICE)运行。此用户拥有所有适当的权限(如伪管理员)。
应用程序使用磁铁 URI 调用 Process.Start()。网络服务器上安装了一个应用程序,它可以自动启动并开始处理磁铁 URI。如果我在网络服务器的“运行”框中输入磁铁 URI,一切都会按预期进行:应用程序启动并开始在后台处理 URI。如果我在 Visual Studio 中调试应用程序,也会发生同样的情况 - 它按预期工作,因为 IIS Express 实例也在同一个会话中运行。
但是,当我在 IIS 中从 Web 应用程序调用进程时,它不会引发任何异常或错误,但不会调用应用程序。我假设这是因为 IIS 在应用程序所在的不同会话中执行应用程序,因此应用程序无法响应 URI 调用,因此进程退出。
如何更改这行代码以在与桌面会话相同的上下文中运行,以便应用程序可以适当地响应和处理 URI?
Process.Start("magnet:?xt=urn:btih:0123456789ABCDEF");
如果桌面会话不存在(例如,该用户尚未登录服务器),我希望会引发某种可捕获的异常,以便在网站上显示友好的错误。
【问题讨论】:
-
您可能会在事件日志中找到一些内容来解释发生了什么问题。从服务访问桌面的信息,类似问题,here。
-
因为这是一件有风险的事情(正如您可以想象的那样,并不是每个人都希望每个人都能够从 Web 客户端启动桌面应用程序......),因此设置起来可能非常困难。另外,您正在尝试调用与 Windows Shell 集成的东西(在磁铁 uri 后面),这增加了诊断的复杂性(通常,shell 通常会吃掉所有错误,以免打扰最终用户......)。首先要做的事情是:您可以使用 .exe 路径而不是 uri 启动应用程序吗?此处提供帮助:stackoverflow.com/questions/4679561/…
-
@SimonMourier 不,我已经尝试过了,该程序是专门为 not 设计的(我不知道为什么,但我已经阅读了它是不可能的)。
-
好吧,您可以尝试使用其他桌面程序,例如记事本。这是第一步。
标签: c# asp.net iis process uri