近日接了一个奇葩需求,内容如题。
实现过程中遇到一些问题,特将实现过程记录于此,供备忘及参考。
首先尝试了正常启动进程的方法,代码如下:
public string RunSPApp() { Process myProcess = new Process(); string fileName = "D:Example.exe"; if (!string.IsNullOrWhiteSpace(fileName)) { try { ProcessStartInfo myProcessStartInfo = new ProcessStartInfo(fileName); myProcess.StartInfo = myProcessStartInfo; myProcess.Start(); return JsonConvert.SerializeObject(new { msg = "success" }); } catch (Exception e) { return JsonConvert.SerializeObject(new { msg = e.Message }); } } else { return JsonConvert.SerializeObject(new { msg = "Something Wrong!" }); } }
但这种方式调用,发现启动成功了,任务管理器中有进程,就是桌面不显示,经排查,发现进程所属用户是网站本身,故对代码进行了修改,以登录用户身份启动进程,代码如下
public string RunSPApp() { Process myProcess = new Process(); string fileName = "D:Example.exe"; if (!string.IsNullOrWhiteSpace(fileName)) { try { ProcessStartInfo myProcessStartInfo = new ProcessStartInfo(fileName); myProcessStartInfo.UserName = "Administrator"; System.Security.SecureString password = new System.Security.SecureString(); string strPWD = "123456"; foreach (char c in strPWD.ToCharArray()) { password.AppendChar(c); } myProcessStartInfo.Password = password; myProcessStartInfo.UseShellExecute = false; // Process 对象必须将 UseShellExecute 属性设置为 False,才能作为用户启动进程。 myProcess.StartInfo = myProcessStartInfo; myProcess.Start(); return JsonConvert.SerializeObject(new { msg = "success" }); } catch (Exception e) { return JsonConvert.SerializeObject(new { msg = e.Message }); } } else { return JsonConvert.SerializeObject(new { msg = "Something Wrong!" }); } }
这下显示调用成功了,但依旧,桌面不显示程序窗体,进程里也不显示了,查看日志
至此,无解。