公布安装包时附带.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命令的返回值,这样更可控。