代码写到35岁 2024-03-14 20:06 采纳率: 8.3%
浏览 41

C#执行bat脚本,在windows 10里面正常,在windows server 2016里面出现问题

C# 执行一个bat脚本,bat脚本的 指令是 启动 控制台应用程序,在windows 10 里面能够弹出dos窗体,正常执行。 但是在windows server 2016里面没有弹出dos 窗体。

C# 调用bat脚本的代码如下:


 // 输入bat 脚本执行启动指令
 string batFilePath = System.AppDomain.CurrentDomain.BaseDirectory + "\\StartTask.bat";

 // 定义要写入.bat文件的指令  
 string[] batCommands =
 {
     "@echo off",
     AnNengSettings.CadTaskPath  
   //  "pause" // 这个命令会暂停脚本执行,直到用户按下任意键  
 };

 // 使用StreamWriter写入.bat文件  
 using (StreamWriter writer = new StreamWriter(batFilePath))
 {
     foreach (var command in batCommands)
     {
         writer.WriteLine(command);
     }
 }

 // 如果你想要运行这个.bat文件,可以使用Process类  
 // 以下参数不要修改,否在在windows server里面无法启动CAD的进程
 ProcessStartInfo startInfo = new ProcessStartInfo(batFilePath)
 {
      UseShellExecute  = true, // 设置为false以重定向输出  
     // RedirectStandardOutput = true, // 重定向标准输出到Process的StandardOutput流  
     // RedirectStandardError = true, // 重定向标准错误到Process的StandardError流  
     // CreateNoWindow = false, // 设置为false以创建新窗口(如果设置为true则不会显示窗口)  
     // Verb = "runas" // 如果需要管理员权限,则使用这个选项  
 };

 using (Process process = new Process { StartInfo = startInfo })
 {
     bool started = process.Start();
     if (started == true)
     {
         LogHelper.SetInfoLog("Bat脚本启动消费者任务成功");
     }
     else
     {
         LogHelper.SetErrorLog("Bat脚本启动消费者任务失败");
     }

 }

  • 写回答

2条回答 默认 最新

  • 檀越@新空间 2024-03-14 20:09
    关注

    代码写到35岁 晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    问题描述: 在Windows 10中执行C#脚本可以正常弹出命令提示符窗口并执行,但在Windows Server 2016中无法弹出命令提示符窗口。

    解决方案:

    1. 在Windows Server 2016上,由于桌面体验组件未安装,默认情况下不支持显示命令提示符窗口。要启用命令提示符窗口,请按照以下步骤操作:

      • 在Windows Server中打开Server Manager。
      • 选择"管理",然后选择"添加角色和功能"。
      • 在"安装类型"选择页面上,选择"角色基于功能的安装"。
      • 在"选择目标服务器"页面上,选择本地服务器或远程服务器。
      • 在"选择服务器角色"页面上,不需要选择任何角色,直接点击"下一步"。
      • 在"选择功能"页面上,展开"用户界面和基础设施",然后选中"桌面体验"组件。
      • 点击"下一步",然后点击"安装"。
      • 完成安装后,重新启动服务器。
    2. 如果执行上述步骤后仍然无法弹出命令提示符窗口,在C#代码中,通过修改ProcessStartInfo对象的属性来解决。

      • UseShellExecute设置为false以重定向输出。
      • CreateNoWindow设置为true以不创建新窗口。

    以下是修改后的C#代码示例:

    ProcessStartInfo startInfo = new ProcessStartInfo(batFilePath)
    {
        UseShellExecute = false,
        CreateNoWindow = true
    };
    
    using (Process process = new Process { StartInfo = startInfo })
    {
        bool started = process.Start();
        if (started)
        {
            LogHelper.SetInfoLog("Bat脚本启动消费者任务成功");
        }
        else
        {
            LogHelper.SetErrorLog("Bat脚本启动消费者任务失败");
        }
    }
    

    请注意,在将UseShellExecute设置为false时,RedirectStandardOutputRedirectStandardError属性也需要设置为true,以便在需要时重定向输出和错误流。

    希望这可以解决你的问题!

    评论

报告相同问题?

问题事件

  • 创建了问题 3月14日