1

我正在尝试在具有 IIS 版本 6.1 SP1 的 Windows Server 2008 R2 64 位上运行 .bat 文件。在我的本地机器上一切顺利,但在服务器上什么都没有发生,除了一个被创建的进程(cms.exe *32)。

从我的搜索来看,主要问题是权限。我在几个地方读到 IIS 出于安全原因默认阻止访问批处理文件。我确实理解这个问题,但在我的情况下不会有安全问题,所以我想仍然运行我的文件。


我发现的解决方案是通过实施模拟来实现的,这意味着:

  1. 更改 web.config -> 身份 impersonate="true"

  2. 更改 IIS 站点身份验证 -> 启用 ASP.NET 模拟

  3. 授予文件和文件夹的权限

  4. 甚至尝试了步骤 1 的不同版本 -> identity impersonate="true" userName=**********


授予 IIS 用户权限:

  1. 在 IIS Admin Service 上设置允许服务与桌面交互

要调用批处理,我在 C# 中使用以下代码:

private void StartPervasive(string npu) 
{
   
    try 
    {
       
        ProcessStartInfo startInfo = new ProcessStartInfo(ConfigurationManager.AppSettings.Get("PervasivePath"));
    
        //startInfo.UseShellExecute = true;
        //startInfo.WorkingDirectory = ConfigurationManager.AppSettings.Get("PervasiveWorkingPath");
        //startInfo.WindowStyle = ProcessWindowStyle.Normal;
        //startInfo.RedirectStandardInput = true;
        //startInfo.RedirectStandardError = true;
        //startInfo.RedirectStandardOutput = true;
    
        //startInfo.FileName = ConfigurationManager.AppSettings.Get("PervasivePath");
     
        startInfo.Arguments = npu;
        Process myProcess = Process.Start(startInfo);
     
        //StreamReader sr = File.OpenText(ConfigurationManager.AppSettings.Get("PervasivePath"));
        //StreamWriter sw = myProcess.StandardInput;
    
        //while (sr.Peek() != -1)
        //{
        //    string readed = sr.ReadLine();
        //    readed = readed.Replace("%1", npu);
        //    sw.WriteLine(readed + Environment.NewLine);
        //}

        //myProcess.WaitForExit();
        //myProcess.Close();
    
   } 
   catch (Exception ex) 
   {
     throw ex;
   }
}

还应该注意的是,我尝试执行其他文件,包括 .exe 文件,但没有结果。

希望对所描述的步骤提供任何建议、帮助和或更正。

4

2 回答 2

0

这可能不是您想要的,但可能会有所帮助。我建议您在服务器上创建一个计划任务来运行 BAT 文件,您可以设置用户权限,然后在您希望运行它时进行计划。

希望这可以帮助。

于 2012-09-14T13:03:07.550 回答
0

下面是另一个 Stackoverflow 文章的链接,该文章似乎对同一问题有非常详细的响应。

IIS7 不启动我的 Exe 文件...

于 2012-09-14T15:56:42.877 回答