昨天项目中因为需要在安装时做配置,而在打包之前是不知道配置的具体信息的。用InstallShield来做打包好像做这样的处理比较方便,但是使用Visual Studio创建安装项目来打包时好像不是那么容易,在网上查找相关的资料一直没有找到很好的方法来直接获取其运行路径,网上有人说继承Installer来做,但是无论如何所能取得的路径是系统msiexec.exe的运行路径,所以这种方法看起来是行不通了。获取其安装路径也是非常简单而且方法有很多种。
    想到以前在做项目时要求程序只能有一个运行实例,这种方法来处理岂不是很好,换种思路来处理:先取得当前运行的所有Process然后再找到那个Setup或是*.msi那不就好了。想到着就赶快动手试验,在程序中加上处理代码,很快搞定。

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);

不过此方法有点不妥之处,那就是如果用户改变了Setup.exe或是*.msi的文件名就不好处理了,为了防止在用户更改文件名后运行安装,你可以在程序中加上判断文件名更改的处理,给用户提示。

[转]获取Setup文件的运行路径相关推荐

  1. IOS中获取各个文件的目录路径的方法和NSFileManager类

    转自:http://blog.sina.com.cn/s/blog_5fb39f910101di92.html IOS中获取各种文件的目录路径的方法 iphone沙箱模型的有四个文件夹,分别是什么,永 ...

  2. Java反射机制 课外01:获取一个文件的绝对路径

    一.获取一个文件的绝对路径 方式一:New FileReader("Name"); -- 这种方式的路径缺点是:移植性差,在IDEA中默认的当前路径是project的根. publ ...

  3. java获取文件绝对路径_java 如何获取一个文件的绝对路径。。。

    你的位置: 问答吧 -> JSP -> 问题详情 java 如何获取一个文件的绝对路径... 例如 InputStream inStream=new FileInputStream(&qu ...

  4. ios中获取各种文件的目录路径方法

    2019独角兽企业重金招聘Python工程师标准>>> iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. docume ...

  5. iOS - 中获取各种文件的目录路径的方法

    转自:https://www.cnblogs.com/zrr-notes/p/5953445.html 我们的app在手机中存放的路径是:/var/mobile/Applications/4434-4 ...

  6. PHP获取当前文件的绝对路径

    dirname(__FILE__) 取到的是当前文件的绝对路径,也就是说,比起相对路径,查找速度是最快的.  如果重复一次可以把目录往上提升一个层次:  比如:$d = dirname(dirname ...

  7. iPhone PHP获取文件,IOS中获取各种文件的目录路径的方法

    iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. documents,tmp,app,Library. (NSHomeDirectory ...

  8. (转)IOS中获取各种文件的目录路径的方法

    iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么.documents,tmp,app,Library.(NSHomeDirectory() ...

  9. java中如何获取当前文件的物理路径?

    (一)在web工程中 方法1: 根据系统变量,如获取tomcat物理路径 String tomcatHome = System.getenv("TOMCAT_HOME");     ...

最新文章

  1. 粒子群算法(1)----粒子群简要
  2. 感知哈希算法(perceptual hash algorithm),
  3. 使用Docx4j操作PPT指南系列(附一)
  4. B站面试官炫耀身价过亿,贬低北邮应试者引热议!不知北邮毕业的B站创始人作何感想?
  5. [转]Javascript 绝句
  6. 编程题:二维平面整数点集求最大值
  7. Winform下的Combox根据值来选中项
  8. JDK1.10+scala环境的搭建之linux环境(centos6.9)
  9. POJ 2808 校门外的树
  10. [WCF Step by Step 读书笔记] Chapter01 WCF 介绍
  11. 刘鹏教授为江苏移动大数据和网络部门作报告
  12. OSGi运行环境下java反序列化问题的解决方式
  13. 数据分析必备软件Excel安装包+激活工具
  14. java代码实现分页_Java分页实现(示例代码)
  15. 主控域NTP时间同步(PTP时钟同步服务器)配置方法
  16. MATLAB求函数零点与极值
  17. 分享200个App移动端模板---总有一个适合你
  18. c语言答案-贾宗璞 许合利,c语言程序设计答案贾宗璞许合利
  19. [总结]FFMPEG命令行工具之ffmpeg详解
  20. vue put 提交 400 Bad Request(有时候可以提交成功)

热门文章

  1. 读芯片信息出错3_数字传感器的电路设计,跟着芯片哥学你也会
  2. 12.PHP_PDO数据库抽象层
  3. POJ1789简单小生成树
  4. 操作系统原理第七章:死锁
  5. C语言经典例80-猴子分桃
  6. 【Linux 内核】CFS 调度器 ⑥ ( CFS 调度器就绪队列 cfs_rq | Linux 内核调度实体 sched_entity | “ 红黑树 “ 数据结构 rb_root_cached )
  7. 【Android APT】注解处理器 ( 配置注解依赖、支持的注解类型、Java 版本支持 )
  8. cgi、fastcgi、php-cgi、php-fpm的关系
  9. String 课后作业2
  10. Hibernate中的Entity类之间的继承关系之一MappedSuperclass