在开发Windows Mobile应用时,可能会遇到需要从应用程序内部启动另一个可执行文件的情况。这可能是为了同步数据、执行特定的任务或其他多种原因。尽管启动外部程序的方法有很多,但个人偏好使用CreateProcess函数,因为它允许选择立即返回或者等待程序执行完成。本文旨在解释如何使用CreateProcess函数来启动一个可执行文件。如果知道更好的方法或者有改进代码的建议,欢迎交流。
要开始开发应用程序,需要以下工具:
应用程序本身相当简单。首先,需要在应用程序中添加以下命名空间的引用:
C# using System.Runtime.InteropServices;
完成这一步之后,还需要以下声明以便执行程序:
public class ProcessInfo {
public IntPtr hProcess;
public IntPtr hThread;
public IntPtr ProcessID;
public IntPtr ThreadID;
}
此外,需要以下函数来简化启动可执行文件的过程。注意使用WaitForSingleObject函数的那一行。如果不想等待应用程序完成,可以将这一行注释掉。
private void LaunchApp(string strPath, string strParms) {
ProcessInfo pi = new ProcessInfo();
byte[] si = new byte[128];
CreateProcess(strPath, strParms, IntPtr.Zero, IntPtr.Zero, 0, 0, IntPtr.Zero, IntPtr.Zero, si, pi);
// 如果不想等待进程退出,可以将以下行注释掉
WaitForSingleObject(pi.hProcess, 0xFFFFFFFF);
int exitCode = 0;
GetExitCodeProcess(pi.hProcess, ref exitCode);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
现在启动应用程序变得非常简单。以下代码行将使用适当的参数启动可执行文件:
C# LaunchApp(textEXE.Text, textParms.Text);