Несколько аргументов с cmd.exe через процесс C # - PullRequest
0 голосов
/ 22 марта 2012

Я пытаюсь вызвать esriRegAsm.exe с аргументами из программы на C #.Цель состоит в том, чтобы зарегистрировать Dll.Поэтому я обычно вызываю esriRegAsm.exe с Dll в качестве аргумента плюс некоторые дополнительные параметры (/ p: Desktop / s).Это прекрасно работает, если я наберу его в cmd.exe.Почему-то я думаю, что процесс отправляет только первую строку в cmd, а не весь список аргументов, но мне нужно "" для пробела в путях.Для отладки я добавил окно сообщения и строки вроде бы в порядке.

Обратная косая черта или двойная обратная косая черта кажутся неважными.

        string targetDir = this.Context.Parameters["targ"];
        string programFilesFolder = this.Context.Parameters["proFiles"];

        System.Diagnostics.Process process = new System.Diagnostics.Process();
        System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
        startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        startInfo.FileName = "cmd.exe";
        startInfo.Arguments = "/C \"" + programFilesFolder + "Common Files\\\\ArcGIS\\\\bin\\\\esriRegAsm.exe\" " + "\"" + targetDir + "RArcGISTest.dll\"  /p:Desktop /s";
        MessageBox.Show("/C \"" + programFilesFolder + "Common Files\\\\ArcGIS\\\\bin\\\\esriRegAsm.exe\" " + "\"" + targetDir + "RArcGISTest.dll\"  /p:Desktop /s");
        process.StartInfo = startInfo;
        process.Start();

Поскольку я не могу прикрепить изображение окна сообщения... вывод:

/ C "C: \ Program Files (x86) \ Common Files \ ArcGIS \ bin \ esriRegAsm.exe" "C: \ install \ RArcGISTest.dll" / p: Рабочий стол /s "

1 Ответ

1 голос
/ 22 марта 2012

Почему вы дважды избегаете вещей, и почему вы направляете это через cmd.exe?Просто выполните процесс напрямую:

string targetDir = this.Context.Parameters["targ"];
string programFilesFolder = this.Context.Parameters["proFiles"];

Process process = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = Path.Combine(programFilesFolder, @"Common Files\ArcGIS\bin\esriRegAsm.exe");
startInfo.Arguments = "\"" + Path.Combine(targetDir, "RArcGISTest.dll") + "\" /p:Desktop /s";
process.StartInfo = startInfo;
process.Start();
...