有没有人知道代码或者有关如何使用visual c ++ 2005启动exe的想法。
如果是Windows Mobile,则dll所处的环境。使用P / Invoke执行此操作的c#是
[的DllImport( “coredll.dll中”)] private static extern int CreateProcess(string strImageName,string strCmdLine,IntPtr pProcessAttributes,IntPtr pThreadAttributes,int bInheritsHandle,int dwCreationFlags,IntPtr pEnvironment,IntPtr pCurrentDir,Byte [] bArray,ProcessInfo oProc);
// c#代码启动.exe CreateProcess(“\ Program Files \ myprogram \ myprogram.exe.exe”,“”,IntPtr.Zero,IntPtr.Zero,0,0,IntPtr.Zero,IntPtr.Zero,new Byte [128],pi);
我在C ++中需要它的原因是因为在运行自定义cab安装程序时,我被迫使用本机dll执行前后检查等。
非常感谢您的想法。 贝
答案 0 :(得分:1)
PROCESS_INFORMATION ProcessInfo = { 0 };
if (CreateProcess(ImagePath,
NULL,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
NULL,
&ProcessInfo))
{
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
}
else
{
return GetLastError();
}
答案 1 :(得分:0)
如果您的意思是在设备上运行exe,那么没有Visual Studio无法直接执行。您需要设置自定义构建步骤或前/后构建步骤来运行将为您执行此操作的应用程序。您可以使用WM5 SDK代码示例prun(或创建自己的代码示例)。 PRun使用RAPI在设备上运行应用程序,因此需要通过ActiveSync连接设备才能使其正常工作。
如果您尝试在设备上“自动”生成内容(例如,单元测试),您可能会考虑运行device emulator。与尝试使用物理设备相比,这可能会使您control更多。
答案 2 :(得分:0)
试试这个:
BOOL RunExe(CString strFile)
{
WIN32_FIND_DATA fd;
HANDLE hFind;
BOOL bFind;
hFind = FindFirstFile(strFile, &fd);
bFind = (hFind != INVALID_HANDLE_VALUE);
if(bFind)
{
if(!(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
SHELLEXECUTEINFO info;
ZeroMemory(&info, sizeof(info));
info.cbSize = sizeof(info);
info.fMask = SEE_MASK_NOCLOSEPROCESS;
info.hwnd = 0;
info.lpVerb = _T("open");
info.lpFile = strFile;
info.lpParameters = NULL;
info.lpDirectory = NULL;
info.nShow = SW_SHOW;
info.hInstApp = NULL;
ShellExecuteEx(&info);
}
else
bFind = FALSE;
}
FindClose(hFind);
return bFind;
}