Install shield打包时踩过的坑

Install shield是Visual studio官方指定打包工具,但官方说明文档和网上相关资料太少,打包过程中只能自己摸索。本文记录了项目中踩的坑,希望有所帮助。
打包时怎么加入所有相关文件?
打包时怎么处理非托管COM组件?
如何选择.NetFramework?
WIN10+VS2015环境里开发的软件,怎么运行在WIN7环境里?
有的DLL在开发环境里运行的很好,为什么在有的电脑上无法正常运行?

1 打包时怎么能加入所有相关文件?
打包时需要包含DLL,图片资源文件和其他配置文件。
复杂些的解决方案都包含了多个项目,一个项目依赖于其他项目,这个时候就需要把其他项目涉及也加入到 project output中。
有一个思路是,参考主项目output目录下的相关资源,通过Add folder或Add file的方式,把这些资源都加入打包。
也可以参考csproj中和CopyToPOutputDirectory的资源,如果有间接引入的资源,就没办法了。比如EmguCV.props里引用了相关资源,但无法直观发现。

2 打包时怎么处理非托管COM组件?
项目里用到COM组件,C#程序通过interop技术对其引用。
打包时,需要配置COM组件属性。选中COM DLL,右击选择属性(property),配置COM属性


3 如何选择.NetFramework?
install shield里选择打包的.NetFramework要和项目属性里的目标框架保持一致。目标框架是可选的,和VS版本没有对应关系。

4 WIN10+VS2015环境里开发的软件,怎么运行在WIN7环境里?
官网说明 Determining Which DLLs to Redistribute   https://msdn.microsoft.com/en-us/library/8kche8ah.aspx 里“The version of the redistributable package must match the version of the Visual Studio toolset used to create your application”
只要部署Visual C++ 2015 Redistributable Package 就可以运行VS2015开发的软件。打包配置如下。
install shield limited edition似乎不支持VC2013 -.-

5 有的DLL在开发环境里运行的很好,为什么在其他电脑上常常无法运行?
这些DLL不是在项目开发环境里生成的,比如可能是在Visual Studio2012的环境下编译的,那么这些DLL就可能依赖于Visual C++2012中的系统库,参考上一条打包加入VC2012。
DLL对系统库的依赖可以通过Depends Walker查看。


6 项目编译成x86程序。打包时,在程序运行目录下面加入了x86子目录,存放部分DLL。结果发现在win10 32位/64位系统里可以正常运行,但在win7 32位和部分的win7 64位系统里找不到x86目录下的DLL,导致运行失败。

最后解决办法是把DLL拷贝到程序运行目录。

微软官网里对于"Dynamic-Link Library Search Order"有说明(https://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx) ,"The directory from which the application loaded.". 但没有明确说明如何处理x86子目录中的DLL。


零零碎碎的问题搞定后,C#平台中的基础概念也弄清楚了。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值