【问题标题】:Execute OS Command on a file C#在文件 C# 上执行 OS 命令
【发布时间】:2011-08-09 21:06:14
【问题描述】:

我正在尝试通过 C# 执行操作系统命令。我有以下代码取自this webpage

//Execute command on file
ProcessStartInfo procStart = 
    new ProcessStartInfo(@"C:\Users\Me\Desktop\Test\System_Instructions.txt", 
                         "mkdir testDir");

//Redirects output
procStart.RedirectStandardOutput = true;
procStart.UseShellExecute = false;

//No black window
procStart.CreateNoWindow = true;

//Creates a process
System.Diagnostics.Process proc = new System.Diagnostics.Process();

//Set start info
proc.StartInfo = procStart;

//Start
proc.Start();

但是当我尝试运行代码时出现以下错误:

{"The specified executable is not a valid application for this OS platform."}

我做错了什么?我试过this example as well,但遇到了同样的问题。

【问题讨论】:

  • 您尝试执行一个文本文件,该文件(如错误所示)是不可执行的。如果要创建文件夹,我建议使用 System.IO 类,如 DirectoryInfo、Fileinfo 等。
  • 从您的描述中完全不清楚您要完成什么。

标签: c# cmd


【解决方案1】:

您使用的ProcessStartInfo 构造函数的重载需要一个可执行文件 文件名和传递给它的参数——.txt 文件本身不能执行。

这听起来更像是您想在文件中执行带有命令的批处理文件。为此,请检查此 SO 线程:How do I use ProcessStartInfo to run a batch file?

【讨论】:

  • 这是有道理的。那么我将如何处理非 .exe 文件呢?
  • @Peppered 你想做的“这个”是什么?你想在记事本中打开文件吗?您想将“mkdir testDir”写入该文件吗?您是否只想执行“mkdir testDir”而与文本文件无关?是否要执行文本文件中的语句?
  • 我想拿一堆文件,保存它们(已经完成了那部分),然后对它们执行一些命令(我不知道它会是什么)。我也不知道我会拥有什么类型的文件
【解决方案2】:

尝试将 USESHELLEXECUTE 成员设置为 TRUE 而不是 FALSE。

它对我有用 - 但我认为这在发布后会对某些用户产生反作用。

【讨论】:

  • 我的错 - 这是为问题答案发布的链接的答案......如果你关注我。
  • 谢谢!我尝试使用 .msi 安装文件,它工作正常。
【解决方案3】:

您正在尝试执行 TXT 文件。这就是你得到的原因

{“指定的可执行文件不是此操作系统平台的有效应用程序。”}

因为,好吧,指定的可执行文件 (TXT) 不是此 OS 平台的有效应用程序。

【讨论】:

    【解决方案4】:

    您将针对具有指定打开应用程序的可执行文件或其他文件。您的目标是一个文本文件;你应该做的是定位记事本,然后提供文本文件的路径作为参数:

    ProcessStartInfo info = new ProcessStartInfo
    {
        FileName = "C:\\Windows\System32\\notepad.exe",
        Arguments = "C:\\Users\\Me\\Desktop\\Test\\System_Instructions.txt"
    }
    
    new Process.Start(info);
    

    或者,如果您的意思是要执行您的文本文件,则需要将其制作为 .bat 文件。

    【讨论】:

      【解决方案5】:

      您正在尝试执行此操作:

      C:\Users\Me\Desktop\Test\System_Instructions.txt mkdir testDir
      

      shell 不知道如何“执行”文本文件,因此命令失败。

      如果您想执行此文本文件作为批处理文件,请将文件扩展名更改为.bat,以便系统知道它是一个批处理文件,然后设置UseShellExecute,使其默认对它的操作(= 运行它,如果是批处理文件)。

      【讨论】:

        【解决方案6】:

        如果要在记事本中打开文件,请使用:

        ProcessStartInfo procStart = 
            new ProcessStartInfo("notepad.exe", @"C:\Users\Me\Desktop\Test\System_Instructions.txt");
        

        如果要写入文件:

                //In case the directory doesn't exist
                Directory.CreateDirectory(@"C:\Users\Me\Desktop\Test\);
                using (var file = File.CreateText(@"C:\Users\Me\Desktop\Test\System_Instructions.txt"))
                {
                    file.WriteLine("mkdir testDir");
                }
        

        如果您在文本文件中有要执行的命令,只需将其重命名为 .bat 即可,它应该可以工作(并且可能内容以“mkdir testDir”作为参数执行某些操作?)

        【讨论】:

          【解决方案7】:

          你想完成什么? 创建目录?使用“System.IO.Directory.CreateDirectory”方法。 打开带有关联程序的 .txt 文件?使用 ProcessStartInfo(@".\filename.txt") 并将 UseShellExecute 设置为 true。这将导致执行该文件类型的关联程序,该程序可能不是 notepad.txt。

          【讨论】:

          • 我想拿一堆文件,保存它们(已经完成了那部分),然后对它们执行一些命令(我不知道它会是什么)。我也不知道我会拥有什么类型的文件
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-09-09
          • 2019-03-10
          • 2017-02-09
          • 2023-03-06
          • 1970-01-01
          • 1970-01-01
          • 2015-11-26
          相关资源
          最近更新 更多