C# 4.0 从C#代码运行.exe时出现问题

C# 4.0 从C#代码运行.exe时出现问题,c#-4.0,imagemagick,shellexecute,C# 4.0,Imagemagick,Shellexecute,我有这个函数,它应该运行一个shell命令。 这就是我所说的: 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;

我有这个函数,它应该运行一个shell命令。 这就是我所说的:

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;
    }
如果我在命令shell中运行此命令,它将起作用:

convert.exe C:\\source\\in\DSC00749.jpg -gravity Center -crop 100x100+0+0-write C:\\source\\out\\DSC00749.jpg
如果我更多地在debug中运行或直接运行它,它就不会创建映像

我的代码有什么问题?我这样做对吗?

您缺少一个反斜杠:
C:\\source\\in\\dsc0749.jpg

为了避免进一步的错误,如果字符串包含反斜杠,请在其前面加上
@
。示例:
@“我的路径\我的文件名”


此外,通过仅处理特定类型的异常,您似乎正在“吞咽”某些
Win32Exception
s。你应该包括
throw在catch块的末尾,以重新显示未处理的
Win32Exception
s。可能是另一个Win32异常,它既不报告“未找到文件”也不报告“访问被拒绝”。

请记住,这是与代码异步运行的,因此
进程.Start
调用将立即返回。如果之后调用
WaitForExit()
,会发生什么


我也不知道你为什么用mvc-3标记这个,但是如果你是从一个web应用程序运行这个,你需要确保你有这样做的权限。

你有到convert.exe的完整路径吗


尝试一下,看看它是否有效,因为您没有收到任何异常。

您是否尝试过通过介入来调试它?另外,这与asp.net和mvc3有什么关系?您是否正在尝试从asp.net-mvc应用程序运行此命令?为什么要将其标记为asp.net?如果它是asp.net mvc应用程序,我会设想1:可执行文件与应用程序所在的目录不在同一目录中,因此无法运行该命令;2:您需要提升权限才能从asp.net帐户运行可执行文件I标记的mvc,因为这是mvc应用程序。这是一个打字错误。为了清晰起见,我更改了路径。该代码将由控制器操作触发。因此,这将在web应用程序中运行。+1正是我的想法。用户可能没有指定文件夹的权限。IIS应用程序(或应用程序池)运行时使用的帐户不是该用户。该应用程序位于我的笔记本电脑上。那么网络服务需要访问该文件夹?这可能不是问题。我看到代码可以很好地保存上传的文件。我说的是iis的“用户帐户”是的。。通常被称为“用户”嗯。我已经设置了env变量。可能这只适用于shell。