做.net的早晚会用到,并且网上还没有这方面的正确资料或几乎很少
2012-03-23 17:22
387 查看
一直以来,找安装程序的msi源文件路径得到的都是“system32”的路径,安装程序做完了,学习WIX的时候发现了方法,并已经测试成功了。
网上有很多获取源文件路径的方法,比如
1、扫描当前所有进程,获取meiexec进程的路径
2、获取当前程序的路径
3、获取发起当前进程的路径
事实上这些路径都不是msi的路径。那么:
怎么获得msi文件的路径?
切换到“自定义视图界面”,打开“自定义操作”属性界面中customactionData属性填入/Sdir=[SourceDIR],
然后在安装方法中写上string sdir=Context.Parameters["SDIR"];
注意:
1、/Sdir=[SourceDIR]与/Sdir="'[SourceDIR]'"等效都可以获得路径,区别是后者得到的路径有“‘”单引号。(测试补充:如果路径中含空格则一定要使用双引号内部单引号的方法)
2、该路径需要处理才能使用,由于系统内部各种转义字符的缘故,得到的路径需要将“\\”替换成“\”,
方法sdir=sdir.replace("\\\\","\\"),也可以这么写sdir=sdir.replace(@"\\", @"\"),
3、其他的写法均会报错
为什么哪些路径不是msi数据库文件的路径?
我们需要将安装程序分成两部分来看,一是setup.exe,二是[productname].msi
前者是引导程序,跟我们写的代码无关;后者是手写的代码和安装相关的文件等等。
msi源文件的路径是msi的一个属性,在win7等系统中右键属性详细信息可以看到msi文件现在的路径,在server2003中直接看不到。
执行msi文件的命令是msiexec.exe [productname].msi……,其中msiexec.exe 的路径是%windir%\system32\msiexec.exe
所以前面的那些方法都不适合windows installer安装过程中获得msi文件的路径,那些方法都是msiexec.exe的路径。
获得msi文件路径有什么用?
目前我想到的至少有2个主要作用:
第一,大多时候在做64位兼容的问题上,并不需要将x64和x86的安装包分开,但是vs又不让将这两者打包到一个msi数据库文件中。那么我们可以当x86的包生成完后,将x64的小程序方法到安装包的目录或指定子目录下,这样就可以通过sdir来调用了。
第二,安装的时候有些文件时为产品运行服务的,有些文件是为安装服务的。后面的这种文件并不一定需要拷贝到安装目录下,另外如果网络安装,还可以保护你写的程序只安装时调用
不足之处请指正
网上有很多获取源文件路径的方法,比如
1、扫描当前所有进程,获取meiexec进程的路径
2、获取当前程序的路径
3、获取发起当前进程的路径
事实上这些路径都不是msi的路径。那么:
怎么获得msi文件的路径?
切换到“自定义视图界面”,打开“自定义操作”属性界面中customactionData属性填入/Sdir=[SourceDIR],
然后在安装方法中写上string sdir=Context.Parameters["SDIR"];
注意:
1、/Sdir=[SourceDIR]与/Sdir="'[SourceDIR]'"等效都可以获得路径,区别是后者得到的路径有“‘”单引号。(测试补充:如果路径中含空格则一定要使用双引号内部单引号的方法)
2、该路径需要处理才能使用,由于系统内部各种转义字符的缘故,得到的路径需要将“\\”替换成“\”,
方法sdir=sdir.replace("\\\\","\\"),也可以这么写sdir=sdir.replace(@"\\", @"\"),
3、其他的写法均会报错
为什么哪些路径不是msi数据库文件的路径?
我们需要将安装程序分成两部分来看,一是setup.exe,二是[productname].msi
前者是引导程序,跟我们写的代码无关;后者是手写的代码和安装相关的文件等等。
msi源文件的路径是msi的一个属性,在win7等系统中右键属性详细信息可以看到msi文件现在的路径,在server2003中直接看不到。
执行msi文件的命令是msiexec.exe [productname].msi……,其中msiexec.exe 的路径是%windir%\system32\msiexec.exe
所以前面的那些方法都不适合windows installer安装过程中获得msi文件的路径,那些方法都是msiexec.exe的路径。
获得msi文件路径有什么用?
目前我想到的至少有2个主要作用:
第一,大多时候在做64位兼容的问题上,并不需要将x64和x86的安装包分开,但是vs又不让将这两者打包到一个msi数据库文件中。那么我们可以当x86的包生成完后,将x64的小程序方法到安装包的目录或指定子目录下,这样就可以通过sdir来调用了。
第二,安装的时候有些文件时为产品运行服务的,有些文件是为安装服务的。后面的这种文件并不一定需要拷贝到安装目录下,另外如果网络安装,还可以保护你写的程序只安装时调用
不足之处请指正
相关文章推荐
- iOS 架构(根据一些网上资料 整理希望大家能够用到)
- 增加、编辑、删除等功能,几乎每个系统都会用到,针对这几个方面,写如下测试用例
- 最近一个项目用到PostgresSQl数据库,有些不同于oracle数据库,尤其时间处理上,结合PostgreSQL手册以及网上转载些资料,如下,方便开发中用到
- 在网上浏览.NET的所有代码,并且让你的Visual Studio的go to definition(F12)指向在线代码
- 根据网上的资料自己写的一个对表格进行客户端排序的.NET用户控件
- 网上收集的关于SQL线程、进程、连接、.net连接池等方面的资料
- .NET错误提示之: (异常来自 HRESULT:0x80131040) 确认 <UsingTask> 声明是正确的,并且该程序集及其所有依赖项都可用
- 网上对C#/.NET的集合类型的整理,各有错误;这个图,虽不完整细致,但是肯定正确无误
- 近日探得用C++将二进制数据存储到XML文件的方法,由于在研究时,未得到网上其他同仁的帮助(网上搜索了半天没有相关资料,只有.NET的),在这里不敢独享,给别的同仁在搜索时能够搜索到相关资料,也算是绵薄之力! )
- 将一个网页嵌入到邮件里,也就是将网页当个正文显示在邮件里,网上这方面的很少。其它的就不多说了。网上好多的。
- 网上找的.net的资料!!!
- 网上收集的关于SQL线程、进程、连接、.net连接池等方面的资料
- 网上的一些Java、Delphi方面的视频、教程、资料
- 最近用到了Quartz,作业调度的方法,对于其中时间配置的方法,在网上找了下资料,摘抄的,忘原作者见谅,我收藏了。
- 哈哈,,无意中发现几个网站,应该是各位大虾发现的几个有.NET下载和学习资料下载的网站
- 分享.NET开发中经常用到的十大软件
- [转]在.NET程序中正确使用String类型
- caffe 框架用到的资料深度学习文章
- KVM 网络 资料整理(网上收集)(这个真的很好)
- VS2010 .NET 4学习资料整理