winfrom 安装包如何在代码中设置安装路径,而不需要获取[TARGETDIR]属性来获取

来源:互联网 发布:现金管理优化方案设计 编辑:程序博客网 时间:2024/05/21 07:53

 

      在winform安装包中,路径一般情况下是用户自己通过图形界面去选择的,然后将这个路径存到注册表中,以供下次我们更新这个系统的时候用,但是有没有一种情况是安装包的路径是通过代码来控制的呢?

      有的,这几天因为项目需要写一个更新包,但是这个更新包的机制是每次更新的时候其实是重新安装了一次,这样的话在更新的过程中路径就不能让用户来选了,而是要通过注册表来获取并且代码绑定,但是我发现就算我们取得了安装路径,那么代码绑定应该在哪里写呢,由于在安装类中,当安装包执行到其中的方法时,安装的路径已经确定了(由安装包来确定),所以在安装类中更改安装的路径是不行的,我也试了下,总是报错。

       那么有一种方法就是在运行这个安装包(msi)的时候,我们给这个安装包路径加上一个参数,假设安装包的路径是:D:/项目安装包文件/HzbSystem.msi;我们希望这个安装包最后的安装到的目标路径是:D:/项目/HzbSystem/,那么我们可以在命令行中输入如图1所示:

 

图1

       这样程序就运行到了指定的位置了,当然这里有个前提,你必须在安装包中的用户界面中删除"启动"里的“安装文件夹”框,最后如图2所示:

图2

      这时候从安装类中获取的[TARGETDIR]就是我们的"D:/项目/HzbSystem/"这个安装路径了。

      然后要在C#代码中运行上面的dos命令就很简单了,如下,定义一个方法RunCmd(),如下代码:  

       思路就如上面,然后运行RunMsi()方法即可,上面的RunCmd方法测试过了,但是RunMsi()没测试过,当然本质上得按照每个人的需求的不同而不同。

       这个问题缠着自己三天了,终于解决了,希望给遇到相同疑问的朋友带去帮助。