Проблема запуска .exe из кода C # - PullRequest
1 голос
/ 07 августа 2011

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

RunCommand("C:\\source\\in\\DSC00749.jpg -gravity Center -crop 100x100+0+0 -write C:\\source\\out\\DSC00749.jpg");

private static string RunCommand(string cmd)
    {
        const int ERROR_FILE_NOT_FOUND = 2;
        const int ERROR_ACCESS_DENIED = 5;

        string strErrMsg = "OK";

        try
        {
            ProcessStartInfo procInfo = new ProcessStartInfo("convert.exe");

            procInfo.CreateNoWindow = true;
            procInfo.UseShellExecute = true;

            procInfo.Arguments = cmd;
            Process.Start(procInfo);
        }
        catch (Win32Exception e)
        {
            if (e.NativeErrorCode == ERROR_FILE_NOT_FOUND)
            {
                strErrMsg = "File not found exception";
            }
            else if (e.NativeErrorCode == ERROR_ACCESS_DENIED)
            {
                strErrMsg = "Access Denied Exception";
            }
        }

        return strErrMsg;
    }

Если я запускаю это в командной оболочке, это работает:

convert.exe C:\\source\\in\DSC00749.jpg -gravity Center -crop 100x100+0+0-write C:\\source\\out\\DSC00749.jpg

Если я запускаю в режиме отладки или запускаю его напрямую, он простоt создать изображения.

Что не так с моим кодом?Я делаю это правильно?

Ответы [ 3 ]

1 голос
/ 07 августа 2011

Имейте в виду, что это выполняется асинхронно с вашим кодом, поэтому вызов Process.Start немедленно вернется. Что произойдет, если вы позвоните WaitForExit() впоследствии?

Также я не уверен, почему вы отметили это с помощью mvc-3, но если вы запускаете это из веб-приложения, вам нужно убедиться, что у вас есть разрешения для этого.

1 голос
/ 07 августа 2011

У вас есть полный путь к конвертируемому файлу файла?

1 голос
/ 07 августа 2011

Вам не хватает обратной косой черты: C:\\source\\in\\DSC00749.jpg

Чтобы избежать дальнейших ошибок, добавьте строку @, если она содержит обратную косую черту.Пример: @"My Path\My Filename"

Более того, вы, похоже, «проглатываете» определенные Win32Exception с, обрабатывая только определенные виды этого исключения.Вы должны включить throw; в конце блока catch, чтобы отбросить Win32Exception s, с которыми вы не справляетесь.Это может быть другое Win32Exception, которое не сообщает ни «Файл не найден», ни «Доступ запрещен».

...