从asp.net代码隐藏在服务器上启动进程,并在服务器桌面上显示它

时间:2009-09-02 22:40:10

标签: asp.net process desktop credentials

我的桌面计算机上运行了一个程序,可以使用WCF服务。这是我以普通用户身份登录时运行的常规Windows窗体应用程序。

我放入了WCF接口,以便从外部网页上看到程序的状态。这很好用,我可以看到正在运行的程序的状态,甚至可以改变我认为合适的东西。

我唯一不能做的就是启动程序。如果我进入网页并且程序正在运行,我希望能够启动它。一个简单的Process.Start(programEXE)是不够的,因为当程序启动时,它不在桌面上,我看不到它,虽然它确实显示在任务管理器中。

我尝试使用这些凭据创建凭据并启动程序,但它以非常模糊的“程序无法启动”错误退出,或者以我的凭据启动但仍未显示在桌面上。在后一种情况下,我在我的名字下的任务管理器中看到它,但没有看到实际的程序。

那么,如何在服务器上启动程序,在登录用户的桌面上可见(只有一个用户,该用户总是登录)?

此外,我可以做些什么来确保这不会成为安全漏洞?我有一个想法是在自己的虚拟目录中运行launcher.aspx,该用户标识仅对program.exe所在的一个目录具有读取权限,并且没有其他读取或写入权限。还有其他建议吗?

最后,为了清楚起见:我尝试在用户的计算机上启动任何内容。单击“启动程序”链接应该在Web服务器上启动程序,而不是在客户端计算机上启动,该程序应该对服务器上的登录用户可见

1 个答案:

答案 0 :(得分:1)

我几乎肯定你不能这样做。您的IIS作为服务运行,并且没有与之关联的特定桌面环境。您尝试做的事情并不适用于Web /服务器环境。

我建议您将win form应用程序更改为Windows服务,然后您就可以通过网站启动/停止它。如果您使用Windows服务启用“与桌面交互”,那么我认为您可以使用form.Show()将应用程序带到当前用户的桌面环境。

如果您是唯一需要运行winform应用程序的人,那么为什么不自己启动应用程序呢?您声明它可能永远不会被您自己的计算机以外的任何计算机使用,因此当您可以通过快捷方式启动winform应用程序时,它似乎是一种访问本地网站以启动本地winform应用程序的复杂方法。 / p>