0

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

我把 WCF 接口放进去,这样我就可以从外部网页看到程序的状态。这很好用,我可以看到正在运行的程序的状态,甚至可以根据我的需要进行更改。

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

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

那么,如何在服务器上启动一个程序,在登录用户的桌面上可见(只有一个用户并且该用户始终处于登录状态)?

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

最后,要明确一点:我不想在用户的计算机上启动任何东西。单击“启动程序”链接应该会在 Web 服务器上而不是在客户端计算机上启动程序,并且该程序应该对服务器上的登录用户可见。

4

1 回答 1

1

我几乎可以肯定你不能那样做。您的 IIS 作为服务运行,并且没有与之关联的特定桌面环境。您正在尝试做的事情在网络/服务器环境中并不真正起作用。

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

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

于 2009-09-02T23:42:26.557 回答