我正在尝试通过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,但遇到了同样的问题。
答案 0 :(得分:5)
您正在使用的ProcessStartInfo
构造函数的重载需要将可执行文件文件名和参数传递给它 - .txt
文件本身不可执行。
听起来更像是要使用文件中的命令执行批处理文件。为此,检查此SO线程:How do I use ProcessStartInfo to run a batch file?
答案 1 :(得分:3)
尝试将USESHELLEXECUTE成员设置为TRUE而不是FALSE。
它对我有用 - 但我认为这会在发布后对某些用户进行重新发布。
答案 2 :(得分:2)
您正在尝试执行TXT文件。这就是你得到的原因
{“指定的可执行文件不是此OS平台的有效应用程序。”}
因为,指定的可执行文件(TXT)不是此OS平台的有效应用程序。
答案 3 :(得分:1)
您将定位具有指定打开应用程序的可执行文件或其他文件。您的目标是文本文件;您应该做的是定位记事本,然后提供文本文件的路径作为参数:
ProcessStartInfo info = new ProcessStartInfo
{
FileName = "C:\\Windows\System32\\notepad.exe",
Arguments = "C:\\Users\\Me\\Desktop\\Test\\System_Instructions.txt"
}
new Process.Start(info);
或者,如果您的意思是要执行文本文件,则需要将其设为.bat文件。
答案 4 :(得分:0)
您正在尝试执行此操作:
C:\Users\Me\Desktop\Test\System_Instructions.txt mkdir testDir
shell不知道如何“执行”文本文件,因此命令失败。
如果您想将执行此文本文件作为批处理文件,请将文件扩展名更改为.bat
,以便系统将其理解为批处理文件,然后将UseShellExecute
设置为它为它执行默认操作(=运行它,如果是批处理文件)。
答案 5 :(得分:0)
如果要在记事本中打开文件,请使用:
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”作为参数执行某些操作?)
答案 6 :(得分:0)
你想要完成什么? 创建一个目录?使用“System.IO.Directory.CreateDirectory”方法。 打开带有相关程序的.txt文件?使用ProcessStartInfo(@“。\ filename.txt”)并将UseShellExecute设置为true。这将导致执行该文件类型的关联程序,这可能不是notepad.txt。