shell 命令未在 IIS 服务器上使用 C# 执行

shell command not executing using c# on IIS server

                        cmd.StartInfo.FileName = "cmd.exe";
                        cmd.StartInfo.RedirectStandardInput = true;
                        cmd.StartInfo.RedirectStandardOutput = true;
                        cmd.StartInfo.CreateNoWindow = true;
                        cmd.StartInfo.UseShellExecute = false;
                        cmd.Start();
                        cmd.StandardInput.WriteLine("@echo off");
                        cmd.StandardInput.WriteLine("echo.");
                        cmd.StandardInput.WriteLine(".\lmutil.exe" + " lmstat -S adskflex -c xxxx@192.168.xx.xx > " + Server.MapPath("Status.txt"));
                        cmd.StandardInput.WriteLine("echo.");
                        cmd.StandardInput.WriteLine("echo.");
                        cmd.StandardInput.WriteLine("pause");
                        cmd.StandardInput.WriteLine("exit");
                        cmd.StandardInput.Flush();
                        cmd.StandardInput.Close();
                        cmd.WaitForExit();

此代码从 AutoDesk 许可服务器 获取 status.txt 并将其保存到当前目录。每次 status.txt 更新。 在本地主机上一切正常,但在主服务器上却不行。

在真正的 IIS 服务器上 status.txt 不更新。当我在服务器上打开 cmd 并执行此命令时,它显示

cant find lmutil.exe

即使在所有代码所在的同一目录中。 我从本地主机移动到服务器时遇到的所有问题...

尝试在配置中指定完整路径lmutil.exe

您是否尝试过弄清楚服务器上的 .\ 路径是什么?让我们假设您 运行 作为本地计算机上的用户使用您的工具,并且您的路径很可能是您的工具的 exe 所在的路径。如果你 运行 它在另一台机器上,例如作为管理员(提升的 cmd 提示符),你最终可能会到达一个不完全是你期望的 .\ 的位置。

所以尝试使用像

这样的东西

AppDomain.CurrentDomain.BaseDir 喜欢

 FileInfo fi = New FileInfo($"{AppDomain.CurrentDomain.BaseDir}\lmutil.exe");
 if(fi.Exisits)
 {
   //do something with your tool
 }

找出您的应用程序的实际位置并在该目录中获取 lmutil.exe。

根据评论更新:

看来您只想更新 IIS 上 DocumentRoot 中的一个文件,所以最简单的方法是将您的工具放在服务器上,然后 运行 把它放在那里。如果你不能把它放在服务器上,你仍然需要确保你可以访问 IIS 上的 status.txt 并将 lnutil.exe 复制到你想要 运行 你的应用程序的机器上(我猜猜这就是你为测试所做的)。

Server.MapPath

更新

这将为您提供服务器上的路径,例如 C:\inet\mysite\bin\lmutil.exe,但如果您 运行 您的应用程序在另一台计算机上,则并不意味着该路径存在于此。您 运行ing 的代码针对本地路径,因此如果您 运行 服务器上的 lmutil,您需要弄清楚如何调用远程位置上的 lmutil.exe!