【问题标题】:How can I use Process.Start() to execute program on the server-side via web service?如何使用 Process.Start() 通过 Web 服务在服务器端执行程序?
【发布时间】:2015-01-05 04:31:52
【问题描述】:

我在 IIS 中创建了一个 wcf 服务和主机。它里面有一个方法来通过从客户端调用在服务器端执行程序。它似乎不起作用。调用该方法时没有任何反应。

System.Diagnostics.Process.Start(@"C:\MtbKill.bat");

上面是不起作用的代码。我也尝试了一些过程。

Process[] process = Process.GetProcessesByName("Mtb");
foreach (var item in process)
{
    try
    {
        item.Kill();
    }
    catch
    {
    }
}

它也不起作用。 我很困惑,它与授权有关吗?因为我尝试过这样创建文件夹,所以没有任何问题。

解决方案

我已经搜索了许多相关问题的来源。这是我发现的 Access is denied at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)

【问题讨论】:

  • 请参阅How to Ask。特别是,“它不起作用”是什么意思?
  • 您的 IIS 应用程序的 AppPool 标识是否有权访问 c:\ ?
  • 不知道怎么查。对不起,我是新手。我会尝试将路径移动到另一个驱动器。
  • @user3386894 只需检查Impersonating进程调用代码是否可以帮助您。
  • 谢谢米奇邓肯。我发现这是如何识别访问iis.net/learn/manage/configuring-security/…

标签: c# wcf


【解决方案1】:

要运行批处理文件,您必须运行带有参数“/c”和文件名的“cmd.exe”。

System.Diagnostics.Process.Start(@"cmd.exe /c C:\MtbKill.bat");

【讨论】:

  • 或者你可以在ProcessStartInfo上使用UseShellExecute
【解决方案2】:

解决方案

抱歉编辑而不是发布答案

这是解决我的问题的相关问题链接。

Access is denied at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)

感谢大家的帮助。

【讨论】:

    【解决方案3】:

    这就是我启动进程的方式:

    try{
     Process.Start("osk.exe", "/C");
    } catch(exception ex)
    {
    WriteLog("Error: Onscreen keyboard could not start.", ex);
    }
    

    这就是我杀死进程的方式:

        try
        {
          Process[] processlist = Process.GetProcesses();
          foreach (Process theprocess in processlist)
          {
            if (theprocess.ProcessName == "osk")
            {
              theprocess.Kill();
            }
          }
        }
        catch (Exception ex)
        {
          WriteLog("Error: KillKeyBoardProcess", ex);
        }
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多