【IT168技术文档】
Process[] processes = Process.GetProcesses(); string tmp = ""; int i = 0;//调试时为了查找线程的个数 foreach (Process pro in processes) { //MSI Title即为你的打包文件在运行时显示的标题 if (pro.ProcessName.ToLower() == "msiexec" && pro.MainWindowTitle == "MSI Title") { //这里在Vista下测试时因为要读写文件(由于Vista使用了UAC来增强安全性, //要求必须以管理员身份运行,而直接运行msi文件只能以普通权限来运行), //所以不让用户直接运行MSI文件,而要求必须从Setup.exe文件运行, //如果你不需要在Vista下使用则不用如此处理 MessageBox.Show("Please run setup.exe", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error); throw new InstallException("run"); } else if (pro.ProcessName.ToLower().IndexOf("setup") && pro.MainWindowTitle == "MSI Title") {//判断ProcessName是否是setup,并且其MainWindowTitle为你的安装文件的Title tmp = tmp + pro.Id + "" + pro.ProcessName + Environment.NewLine; tmp = tmp + " " + i.ToString() + "=" + pro.MainModule.FileName + Environment.NewLine;//pro.MainModule.FileName即为Setup的完整运行路径 tmp = tmp + " " + i.ToString() + "=" + pro.MainWindowTitle + Environment.NewLine; } } MessageBox.Show(tmp);