代码写到35岁 2024-03-15 10:01 采纳率: 9.1%
浏览 25

C# 服务使用 Process 调用程序,在VS里面成功,部署到IIS里面后调用失败

C# 服务使用 Process 调用程序,在VS里面成功,部署到IIS里面后调用失败,为什么?
代码如下:

 public static void CreateProcess(InputArgument args, string[] commandParams)
 {
     try
     {
         ProcessStartInfo startInfo = new()
         {
             FileName = @"C:\Program Files\Autodesk\AutoCAD 2022\accoreconsole.exe",
             Arguments = " /l zh-CN ",
             UseShellExecute = false,
             CreateNoWindow = true,
             RedirectStandardInput = true // 重定向标准输入流
         };

         using Process process = new();
         process.StartInfo = startInfo;
         process.Start();
         foreach (string command in commandParams)
         {
             process.StandardInput.WriteLine(command);
         }

         process.StandardInput.WriteLine(args.ToBase64String());
         process.StandardInput.WriteLine("quit"); // 发送退出命令
         process.WaitForExit(); // 等待外部程序退出
         if (process.ExitCode != 0)
         {
             LogHelper.SetErrorLog("创建图纸插件进程启动失败");
         }
     }
     catch (Exception ex)
     {
         LogHelper.SetErrorLog("插件创建文件失败:" + ex.Message);
     }
 }

  • 写回答

5条回答 默认 最新

  • Kwan的解忧杂货铺 2024-03-15 10:02
    关注

    代码写到35岁 上午好☀️☀️☀️️
    本答案参考ChatGPT-3.5

    部署到IIS后调用失败的原因可能是IIS的执行环境与Visual Studio的环境不同,导致程序无法正常执行。

    解决方案:

    1. 确认程序依赖项是否存在:检查部署到IIS的服务器上是否安装了AutoCAD和相关的依赖项,例如accoreconsole.exe。确保程序所需的所有文件和依赖项都已正确安装并在正确的路径下。

    2. 修改程序路径:根据部署服务器上的情况,确认AutoCAD程序是否在指定的路径下,如果不是,则需要修改程序中的程序路径。

    3. 授予适当的权限:确保IIS进程具有足够的权限以执行您的程序。您可能需要将应用程序池的身份设置为具有执行所需程序的权限。

    4. 检查IIS配置:在部署到IIS之前,请确保您的IIS配置正确。例如,您可能需要启用CGI和FastCGI模块以支持C#服务的执行。还要确认是否正确设置了应用程序池和站点的身份。

    5. 检查日志和错误信息:通过查看IIS日志和应用程序的错误信息,可以获取更多关于错误原因的详细信息。

    • 请注意,在将程序部署到IIS之前,请确保程序在本地环境中(在Visual Studio中)进行了彻底测试,以确保其在正常环境中能够正常工作。

    修改后的代码示例:

    public static void CreateProcess(InputArgument args, string[] commandParams)
    {
        try
        {
            ProcessStartInfo startInfo = new ProcessStartInfo
            {
                FileName = @"C:\Program Files\Autodesk\AutoCAD 2022\accoreconsole.exe",
                Arguments = " /l zh-CN ",
                UseShellExecute = false,
                CreateNoWindow = true,
                RedirectStandardInput = true // 重定向标准输入流
            };
    
            using (Process process = new Process())
            {
                process.StartInfo = startInfo;
                process.Start();
                foreach (string command in commandParams)
                {
                    process.StandardInput.WriteLine(command);
                }
    
                process.StandardInput.WriteLine(args.ToBase64String());
                process.StandardInput.WriteLine("quit"); // 发送退出命令
                process.WaitForExit(); // 等待外部程序退出
                if (process.ExitCode != 0)
                {
                    LogHelper.SetErrorLog("创建图纸插件进程启动失败");
                }
            }
        }
        catch (Exception ex)
        {
            LogHelper.SetErrorLog("插件创建文件失败:" + ex.Message);
        }
    }
    

    请尝试根据上述解决方案逐一排查和解决问题。如果问题仍然存在,请尽可能提供更多的错误信息和日志,以便更进一步地进行调试和定位错误原因。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月15日

悬赏问题

  • ¥15 Java与Hbase相关问题
  • ¥20 bash代码推送不上去 git fetch origin master #失败了
  • ¥15 LOL外服加入了反作弊系统,现在游戏录像rofl文件离线都无法打开
  • ¥15 在centos7安装conda
  • ¥15 c#调用yolo3 dll文件获取的数据对不上
  • ¥20 WPF 如何实现多语言,label 和cs(live Charts)中是否都能翻译
  • ¥15 STM32F103上电短路问题
  • ¥15 打开软件提示错误:failed to get wglChoosePixelFormatARB
  • ¥15 (标签-python|关键词-char)
  • ¥15 python+selenium,在新增时弹出了一个输入框