近日接了一个奇葩需求,内容如题。

实现过程中遇到一些问题,特将实现过程记录于此,供备忘及参考。

首先尝试了正常启动进程的方法,代码如下:

        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 = "";
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!" });
}
}

这下显示调用成功了,但依旧,桌面不显示程序窗体,进程里也不显示了,查看日志

通过网页或Serverice远程系统网站(服务)所在服务器本地的应用程序(未成功)-LMLPHP

至此,无解。

05-21 01:20