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