我有一个程序在我的桌面计算机上运行,它使 WCF 服务可用。这是我以普通用户身份登录时运行的常规 Windows 窗体应用程序。
我把 WCF 接口放进去,这样我就可以从外部网页看到程序的状态。这很好用,我可以看到正在运行的程序的状态,甚至可以根据我的需要进行更改。
我唯一不能做的就是启动程序。如果我进入网页并且程序没有运行,我希望能够启动它。一个简单的 Process.Start(programEXE) 是不够的,因为当程序启动时,它不在桌面上,我看不到它,尽管它确实显示在任务管理器中。
我尝试创建凭据并使用这些凭据启动程序,但它以非常模糊的“程序无法启动”错误退出,或者以我的凭据启动但仍未显示在桌面上。在后一种情况下,我在我的名字下的任务管理器中看到它,但看不到实际的程序。
那么,如何在服务器上启动一个程序,在登录用户的桌面上可见(只有一个用户并且该用户始终处于登录状态)?
另外,我可以做些什么来确保这不会成为安全漏洞?我的一个想法是在它自己的虚拟目录中运行launcher.aspx,该用户ID 只对program.exe 所在的一个目录具有读取权限,并且没有其他读取或写入权限。还有其他建议吗?
最后,要明确一点:我不想在用户的计算机上启动任何东西。单击“启动程序”链接应该会在 Web 服务器上而不是在客户端计算机上启动程序,并且该程序应该对服务器上的登录用户可见。