公布安装包时附带.Net 4.0平台
发布安装包时附带.Net 4.0平台
最近有点闲,被搞安装包的哥们儿拉去帮忙调查下如题的问题。
嗯,结论是,.net的framework都没有merge module,将来也不会有。
所以只能调用.net的安装包(exe) 文件,从返回值判断安装的情况。
我其实不想写这篇笔记,之所以写了,只想说一句,Ruby的system函数调查返回值相当方便,调用完成后,看一眼$?这个全局变量就有了。
.net 4.0的安装包如果安装成功,嗯,当然的,返回0;如果需要重启,返回194好像。
这个项目真他妈恶心,呸呸呸,屌丝就这命。
附注:Ruby的$?有bug,返回值如果超过了16bit整数,只截取了这16bit……当前版本Winodws版1.9.2。
另附:自从VS2005开始用msbuild取代nmake后,buildfile(之前的nmakefile) 也就是vcxproj文件可以更直观地编辑了(xml)。很常用的一个功能是build之后拷贝文件,例如在vcxproj添加如下代码(不分C#工程还是C++工程):
<Project> <OtherStuff>....</OtherStuff> <Target Name="AfterBuild"> <ItemGroup> <LibFiles Include="$(ProjectDir)xxx\lib\VS2010_$(ConfigurationName)\*.dll" /> <DataFiles Include="$(ProjectDir)xxx\data\**\*" /> </ItemGroup> <Copy SourceFiles="$(OutDir)$(TargetName)$(TargetExt)" DestinationFolder="$(SolutionDir)bin\x86\$(Configuration)\" SkipUnchangedFiles="true" /> <Copy SourceFiles="$(OutDir)$(TargetName)$(TargetExt)" DestinationFolder="$(SolutionDir)..\Test\Application\TestApplication\bin\$(Configuration)\" SkipUnchangedFiles="true" /> <Copy SourceFiles="@(LibFiles)" DestinationFolder="$(SolutionDir)..\GoGetIt\bin\x86\$(Configuration)\" SkipUnchangedFiles="true" /> <Copy SourceFiles="@(DataFiles)" DestinationFolder="$(SolutionDir)..\GoGetIt\bin\x86\$(Configuration)\%(RecursiveDir)" SkipUnchangedFiles="true" /> <Copy SourceFiles="@(LibFiles)" DestinationFolder="$(SolutionDir)..\Test\Application\TestApplication\bin\$(Configuration)\" SkipUnchangedFiles="true" /> <Copy SourceFiles="@(DataFiles)" DestinationFolder="$(SolutionDir)..\Test\Application\TestApplication\bin\$(Configuration)\%(RecursiveDir)" SkipUnchangedFiles="true" /> <Copy SourceFiles="@(LibFiles)" DestinationFolder="$(SolutionDir)..\Test\Data\GoGetIt.Test.Data.DescAnalyzer\bin\$(Configuration)\" SkipUnchangedFiles="true" /> <Copy SourceFiles="@(DataFiles)" DestinationFolder="$(SolutionDir)..\Test\Data\GoGetIt.Test.Data.DescAnalyzer\bin\$(Configuration)\%(RecursiveDir)" SkipUnchangedFiles="true" /> </Target> </Project>
其中出现的标签的具体含义可自行google。
这样做比写copy命令的好处在于,再也不用担心没加双引号的问题,且每一个文件的移动都是msbuild知道并且监测的,相比较去检查copy命令的返回值,这样更可控。