我正在尝试在具有 IIS 版本 6.1 SP1 的 Windows Server 2008 R2 64 位上运行 .bat 文件。在我的本地机器上一切顺利,但在服务器上什么都没有发生,除了一个被创建的进程(cms.exe *32)。
从我的搜索来看,主要问题是权限。我在几个地方读到 IIS 出于安全原因默认阻止访问批处理文件。我确实理解这个问题,但在我的情况下不会有安全问题,所以我想仍然运行我的文件。
我发现的解决方案是通过实施模拟来实现的,这意味着:
更改 web.config -> 身份 impersonate="true"
更改 IIS 站点身份验证 -> 启用 ASP.NET 模拟
授予文件和文件夹的权限
甚至尝试了步骤 1 的不同版本 -> identity impersonate="true" userName=**********
授予 IIS 用户权限:
- 在 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 文件,但没有结果。
希望对所描述的步骤提供任何建议、帮助和或更正。