Командная строка с параметрами - PullRequest
0 голосов
/ 02 февраля 2012

у меня есть этот код:

string filePath = ConfigurationManager.AppSettings.Get("FILE_SAVE_PATH") + fileName;
string newFilePath = ConfigurationManager.AppSettings.Get("FILE_SAVE_PATH") + fileName.Replace(".dbf", ".csv");
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.WorkingDirectory = ConfigurationManager.AppSettings.Get("FILE_SAVE_PATH");
startInfo.FileName = "cmd.exe";
startInfo.Arguments = string.Format("\"{0}\" \"{1}\" /EXPORT:{2} /SEPTAB", ConfigurationManager.AppSettings.Get("DBF_VIEWER_PATH"), filePath, newFilePath);
try
{
    using (Process exeProcess = Process.Start(startInfo))
    {
        exeProcess.WaitForExit();
    }
}
catch{}

Проблема в том, что он запускает командную строку и ничего не делает. Кажется, что он не передает аргументы в командную строку (командная строка пуста). У кого-нибудь есть идея, где может быть проблема?

Ответы [ 3 ]

2 голосов
/ 03 февраля 2012

Я решил свою проблему. Это было во мне. Я пытался запустить командную строку и дать ей параметры, чтобы она запустила другую программу с параметрами. Разве это не глупо? Теперь я запускаю нужную мне программу с параметрами, и она отлично работает:

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.WorkingDirectory = ConfigurationManager.AppSettings.Get("FILE_SAVE_PATH");
startInfo.FileName = ConfigurationManager.AppSettings.Get("DBF_VIEWER_PATH");
startInfo.Arguments = string.Format("\"{0}\" /EXPORT:{1} /SEPTAB", filePath, newFilePath);
using (Process exeProcess = Process.Start(startInfo))
{
    exeProcess.WaitForExit();
}
1 голос
/ 02 февраля 2012

Можно попытаться добавить аргумент /c (Carries out command and then terminates) в cmd.exe:

startInfo.Arguments = string.Format("/c \"{0}\" \"{1}\" /EXPORT:{2} /SEPTAB", ConfigurationManager.AppSettings.Get("DBF_VIEWER_PATH"), filePath, newFilePath);

РЕДАКТИРОВАТЬ: Как отметил Педро, вам действительно следует избегать catch{}, поскольку он будет скрывать любое выброшенное исключение.

0 голосов
/ 02 февраля 2012

Используйте команду catch следующим образом:

try
{
    using (Process exeProcess = Process.Start(startInfo))
    {
        exeProcess.WaitForExit();
    }
}
catch(Exception ex)
{
     Console.Writeline(ex.ToString());
     Console.ReadKey();
}

, чтобы отобразилось возникшее исключение, которое предоставит вам важную информацию о том, что не так.

...