Создать / запустить командный файл программно - PullRequest
4 голосов
/ 06 февраля 2011

Я пытаюсь создать cmd-файл, который установит MSI, а затем выполнит этот cmd-файл с помощью кода C #.Код работает отлично, если я запускаю его, используя f5 или control + f5 из Visual Studio.

Однако, как только я упаковываю код в MSI-файл и устанавливаю его (это приложение wpf), когда он выполняет соответствующий код, он открывает окно команд, но не выполняет команду.Вместо этого он говорит: «C: \ Program не распознается как внутренняя или внешняя команда ...» Я знаю, что эта ошибка означает, что в пути к файлу нет кавычек, но это не так, как вы можете видеть под кавычкамиздесь.Также, если я перехожу в каталог программных файлов, файл 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();
        }

1 Ответ

3 голосов
/ 06 февраля 2011

, как вы можете видеть ниже, есть цитаты.

Вы помещаете их в первую часть, но не там, где выполняете cmd.exe.

Поскольку в вашем пути есть пробелы, вам нужно заключить его в кавычки.Попробуйте:

p.StartInfo = new ProcessStartInfo("cmd.exe", "/k \"" + CmdFilePath + "\"");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...