ole*_*sii 9 c# iis hosting wcf
我想从WCF服务端的Intranet客户端运行进程.在我的情况下,客户端要求服务器在提供的凭据下在服务器的机器上创建新进程.WCF服务托管在IIS 7.5上,我使用此代码启动进程
var processInfo = new ProcessStartInfo("C:\\Windows\\System32\\notepad.exe")
{
UserName = "some user",
Password = MakeSecureString("some password"),
UseShellExecute = false,
LoadUserProfile = true
};
Process process = Process.Start(processInfo);
Run Code Online (Sandbox Code Playgroud)
如果我将WCF服务托管为在admin用户下运行的自托管控制台应用程序,并且我看到记事本在另一个用户下启动,则此代码有效.它在IIS上失败,没有异常,但进程立即终止
process.HasExited = true;
process.ExitCode = -1073741502;
Run Code Online (Sandbox Code Playgroud)
在IIS上,WCF应用程序在具有管理员权限的用户下运行,并且已在web.config中定义完全信任.我不能使用自托管应用程序,因为它不支持简单的持续交付(例如带有IIS Web场的WebDeploy).
问:如何从IIS上托管的WCF服务启动服务器端的进程?
编辑:
我偶然发现了这篇文章,有类似的问题,我尝试了所有方法,包括Process.Start和P/Invoke与CreateProcessWithLogonW和CreateProcessAsUser的所有可能变体我也尝试向用户授予其他权限.不适用于与该人发布的错误消息相同的错误消息.
Oleksii,重点是,如果您在控制台应用程序中托管 WCF 服务,则该用户会存在一个 Windows 会话(用户登录并加载 Windows 资源管理器),并且记事本会为该用户打开并显示,因此您可以看到它在用户界面中。
当您在 IIS 中托管 WCF 服务时,作为服务器,IIS 不需要且不允许用户交互,并且在没有用户登录的情况下也可以工作;在这种情况下,没有 UI 来托管您的记事本或其他支持 UI 的应用程序,您可以执行细化或其他批处理作业的过程,但不会呈现 Windows UI 应用程序,因为 Windows 资源管理器不会为您加载,也没有地方可以执行渲染进程的 UI。
| 归档时间: |
|
| 查看次数: |
10053 次 |
| 最近记录: |