我正在尝试在辅助角色中调用可执行文件
我尝试了不同的可执行文件:
1-program1.exe (C code compiled with visual studio, target: Win32)
2-program2.exe (C# code, target: x86, this is a dummy program it only creates a text file)
3-program3.exe (C code compiled with visual studio, target: win32, this is a dummy program it only creates a text file)
我的目标是能够运行program1.exe。
结果:
1- no signs of success. It should generate some files for any successful run. No files were generated.
2- success. It creates the text file.
3- no signs of success. No file was generated.
所以,我想了解为什么program1.exe无法正常工作但无法找到原因。我明白问题不是program1.exe特有的。对于任何win32应用程序,都存在问题。
这可能是什么原因?
以下是处理调用外部应用程序的代码部分:
var localStorage = RoleEnvironment.GetLocalResource("WorkerLocalStorage");
String workingDir = localStorage.RootPath + @"job";
var appRoot = Path.Combine(Environment.GetEnvironmentVariable("RoleRoot")
+ @"\", @"approot");
String workingDir = localStorage.RootPath + @"job";
String cmdline = "command1 command2";
ProcessStartInfo startinfo = new ProcessStartInfo();
startinfo.CreateNoWindow = false;
startinfo.UseShellExecute = true;
startinfo.FileName = Path.Combine(appRoot, @"program1.exe");
//startinfo.FileName = Path.Combine(appRoot, @"program2.exe");
//startinfo.FileName = Path.Combine(appRoot, @"program3.exe");
startinfo.Arguments = cmdline;
startinfo.WorkingDirectory = workingDir;
Process exeProcess = Process.Start(startinfo);
exeProcess.WaitForExit();
program2.exe可以正常工作,我将文件上传到blob没有任何问题。我找不到问题。它可以与传递命令行参数相关吗?我是否需要为C编码的可执行文件指定其他内容?
顺便说一句,所有测试都在模拟器(即开发环境)中成功
答案 0 :(得分:6)
我的直觉反应是你应该检查win32 exe的所有必要的dll是否可用 - 特别是像Visual C ++可再发行组件的dll - 如果缺少任何这些并且需要,那么应用程序将无法成功启动。使用dumplib或依赖于查看所需内容。
可能导致问题的另一件事是,如果您的exe没有对您传入的路径之一进行必要的读/写访问。
可能有助于您调试此问题的其他机制:
最后一点 - 为了最佳地使用Azure,您可能应该以64位C编译为目标,因为Azure VM都是64位。