Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用shellExecute运行c#控制台应用程序_C#_C++_.net_Visual Studio 2010_Console Application - Fatal编程技术网

使用shellExecute运行c#控制台应用程序

使用shellExecute运行c#控制台应用程序,c#,c++,.net,visual-studio-2010,console-application,C#,C++,.net,Visual Studio 2010,Console Application,我有一个c#控制台应用程序(NetFramework4.5,VisualStudio2010Express)。我可以运行这个应用程序使用cmd和它的工作正常。但有一些非常重要的原因,我需要从C++编写的其他应用程序运行这个应用程序。我尝试使用ShellExecute、CreateProcess和WinExec运行c#app。它总是崩溃,并且不会在我之前使用cmd启动它的同一台机器上运行。还有什么方法可以启动这个c#应用程序吗。或者我需要用某种特殊的方式编译/组装这个c#应用程序吗? 更新 例如:

我有一个c#控制台应用程序(NetFramework4.5,VisualStudio2010Express)。我可以运行这个应用程序使用cmd和它的工作正常。但有一些非常重要的原因,我需要从C++编写的其他应用程序运行这个应用程序。我尝试使用ShellExecute、CreateProcess和WinExec运行c#app。它总是崩溃,并且不会在我之前使用cmd启动它的同一台机器上运行。还有什么方法可以启动这个c#应用程序吗。或者我需要用某种特殊的方式编译/组装这个c#应用程序吗? 更新 例如:

方法1

SHELLEXECUTEINFO ShExecInfo = {0};  
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);   
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;  
ShExecInfo.hwnd = NULL;  
ShExecInfo.lpVerb = NULL;  
ShExecInfo.lpFile = "C:\\PATH\\To\\THE\\APP.exe";  
ShExecInfo.lpParameters = szParameters;  
ShExecInfo.lpDirectory = NULL;  
ShExecInfoFlash.hInstApp = NULL;  
ShellExecuteEx(&ShExecInfoFlash);  
WaitForSingleObject(ShExecInfoFlash.hProcess,INFINITE); 
方法2

PROCESS_INFORMATION pi; 
char bff[512]; 
memset(&si,0,sizeof(si)); 
si.cb=sizeof(si); 
if(!CreateProcess(NULL,szParameters,NULL,NULL,0,0,NULL,NULL,&si,&pi)) 
{ return TS_METHOD_ABORTED;} 
WaitForSingleObject(pi.hProcess,INFINITE); 
CloseHandle(pi.hProcess); 
CloseHandle(pi.hThread);

它总是以同样的方式崩溃。它告诉我有一些意想不到的事情发生了,建议我给MS女士发送报告。

> P>我没有做你在C++中试图做的事情,但是我最近在C中做了。我知道这是半个答案,所以提前表示歉意。C++中的ShellExecute(或其他任何方法)是否能够设置正在启动的程序的工作目录?我发现,有时如果不设置此选项,正在启动的程序会认为它正在系统文件夹中运行,因此可能无法加载资源,因为相对路径错误

希望能有帮助

编辑:

它似乎确实有你要找的东西

现在发布了一个示例,从上面:

SHELLEXECUTEINFO ShExecInfo = {0};  
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);   
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;  
ShExecInfo.hwnd = NULL;  
ShExecInfo.lpVerb = NULL;  
ShExecInfo.lpFile = "C:\\PATH\\To\\THE\\APP.exe";  
ShExecInfo.lpParameters = szParameters;  
ShExecInfo.lpDirectory = NULL;  
ShExecInfoFlash.hInstApp = NULL;  
ShellExecuteEx(&ShExecInfoFlash);  
WaitForSingleObject(ShExecInfoFlash.hProcess,INFINITE); 
首先,我建议尝试启动另一个你知道应该可以运行的程序,比如notepad.exe

接下来,正如我最初所说的,将工作目录设置为与exe匹配

ShExecInfo.lpFile = "C:\\PATH\\To\\THE\\APP.exe";  
ShExecInfo.lpParameters = szParameters;  
ShExecInfo.lpDirectory = "C:\\PATH\\To\\THE";  

你是如何从C++中执行程序的?C程序从不羞于抛出异常。您不应该害羞地利用这一点并实际显示异常。这要求您为AppDomain.CurrentDomain.UnhandledException事件编写事件处理程序。记录或显示e.ExceptionObject.ToString()值。您将从堆栈跟踪中看到异常消息和结果糟糕的方式。@HansPassant我没有从c#app中得到异常。当我尝试运行C++程序时,我会遇到异常。这是标准的windows异常“oops有问题,是否要向MS发送报告”。当我尝试用其他方式运行其他控制台.exe应用程序(从其他供应商)时,C++应用程序只运行其他应用程序,没有例外。ERM,启动程序的代码是C++代码。我放弃了。如果手动双击或自己运行C#可执行文件会发生什么。它是否如你所期望的那样运行?此外,C#可执行文件是否具有运行所需的任何特殊权限,也就是说,它是否需要作为特定用户调用,或者是否有任何深奥的安全需求?您试图在什么操作系统上调用C#应用程序?最后,您是否在您试图调用应用程序的计算机上安装了正确的目标.Net framework?如果其他应用程序崩溃,然后,C++应用程序可能找到了C可执行文件。它可能已经找到了C xexe,但是C应用程序可能将其工作目录设置为C++应用程序,甚至是系统管理员。我几乎爱你。