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

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

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

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

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

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

至此,无解。

原文地址:https://www.cnblogs.com/Vulpers/p/7685414.html