首页 > 解决方案 > 当我从 c# 运行 .cmd 文件时访问被拒绝

问题描述

我有一个 Web 应用程序托管在装有 Windows Server 2008 的服务器计算机上的 IIS7 服务器上,该应用程序由执行一个 .cmd 文件组成,但它向我显示以下错误

System.ComponentModel.Win32Exception (0x80004005): Access is denied
   en System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
   en System.Diagnostics.Process.Start()
   en System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
   en Ted.MNSProject.Reiniciar.Shutdown() en C:\Users\test\Desktop\Soluciones\MNS\Ted.MNS\Ted.MNSProject\Reiniciar.aspx.cs:línea 154
   en Ted.MNSProject.Reiniciar.btnSiReiniciar_Click(Object sender, EventArgs e) en C:\Users\test\Desktop\Soluciones\MNS\Ted.MNS\Ted.MNSProject\Reiniciar.aspx.cs:línea 59

这是我的代码源

       protected void btnSiReiniciar_Click(object sender, EventArgs e)
        {
            try
            {
                Shutdown();

                Log2("MNS OK");
            }
            catch (Exception ex)
            {
                Log2("MNS ERROR  " + ex.ToString());
            }

        }



public void Shutdown()
        { 
            string pathBAT = "C:\\Users\\pc1\\Desktop\\restartWindows.cmd";

            ProcessStartInfo startInfo = new ProcessStartInfo(pathBAT);

            startInfo.Verb = "runas";
            System.Diagnostics.Process.Start(startInfo);

        }

标签: c#.netvisual-studioc#-4.0iis-7

解决方案


当您将其部署到 IIS 时,所有代码都将在“IIS Apppool\”下执行,并且像 cmd 这样的文件将通过您的身份验证用户(如 IUSR)访问。

所以请尝试将您的应用程序池设置为本地系统,并将匿名用户设置为应用程序池标识。 在此处输入图像描述 在此处输入图像描述

如果您不想使用本地系统作为应用程序池标识,请尝试使用故障转储和进程监视器来解决此问题。它将告诉我们如何正确授予权限。


推荐阅读