C# 以编程方式创建/运行命令文件

C# 以编程方式创建/运行命令文件,c#,cmd,C#,Cmd,我正在尝试创建一个cmd文件,该文件将安装一个.msi,然后通过C#代码执行该cmd文件。如果我在VisualStudio中使用f5或control+f5来运行它,那么代码将非常有效 但是,一旦我将代码打包到一个.msi文件中并安装它(它是一个wpf应用程序),当它执行相关代码时,它会打开命令窗口,但不会执行命令。相反,它说:“C:\Program不被识别为内部或外部命令…”我知道这个错误意味着文件路径周围没有引号,但事实并非如此,正如您在下面看到的引号一样。另外,如果我转到program fi

我正在尝试创建一个cmd文件,该文件将安装一个.msi,然后通过C#代码执行该cmd文件。如果我在VisualStudio中使用f5或control+f5来运行它,那么代码将非常有效

但是,一旦我将代码打包到一个.msi文件中并安装它(它是一个wpf应用程序),当它执行相关代码时,它会打开命令窗口,但不会执行命令。相反,它说:“C:\Program不被识别为内部或外部命令…”我知道这个错误意味着文件路径周围没有引号,但事实并非如此,正如您在下面看到的引号一样。另外,如果我转到program files目录,则会出现Reinstall.cmd文件,其中包含引号。我甚至可以双击生成的Reinstall.cmd文件,它会很好地执行。我在这里错过了什么

代码如下:

private string MSIFilePath = Path.Combine(Environment.CurrentDirectory, "HoustersCrawler.msi");
        private string CmdFilePath = Path.Combine(Environment.CurrentDirectory, "Reinstall.cmd");

private void CreateCmdFile()
        {
            //check if file exists.
            if (File.Exists(CmdFilePath))
                File.Delete(CmdFilePath);
            //create new file.
            var fi = new FileInfo(CmdFilePath);
            var fileStream = fi.Create();
            fileStream.Close();
            //write commands to file.
            using (TextWriter writer = new StreamWriter(CmdFilePath))
            {
                writer.WriteLine(String.Format("msiexec /i \"{0}\"", MSIFilePath));// /quiet
            }
        }

        private void RunCmdFile()
        {//run command file to reinstall app.
            var p = new Process();
            p.StartInfo = new ProcessStartInfo("cmd.exe", "/k " + CmdFilePath);
            p.Start();
            p.WaitForExit();
        }
正如你在下面看到的,引号就在那里

您可以将它们放在第一部分,但不是执行
cmd.exe
的位置

因为路径中有空格,所以需要用引号将其括起来。尝试:

p.StartInfo = new ProcessStartInfo("cmd.exe", "/k \"" + CmdFilePath + "\"");