Power shell脚本 - 我们可以在构建时设置dll产品版本吗?

时间:2016-07-04 02:11:23

标签: powershell dll vb6 fileversioninfo

我是Powershell的新手。 我正在使用power shell脚本来构建VB​​6 dll。

$compiler = "C:\Program Files (x86)\Microsoft Visual Studio\VB98\VB6.EXE".
$vbpPath= "C:\...\Desktop\ProjectFile\ProjectName.vbp"
$Outputpath = "C:\...\Desktop\Destination\ProjectName.dll"

Start-Process -FilePath "`"$compiler `"" -ArgumentList "/out
error.txt /make `"$vbpPath`" `"$Outputpath `""  -PassThru -Wait

我们可以在构建时自行设置产品版本吗? 假设将产品版本设置为“Mysoftware 5.1 Beta 6”。 提前致谢。

1 个答案:

答案 0 :(得分:0)

嗨,对任何遇到类似问题的人,

引用此链接后: How do I set the version information for an existing .exe, .dll?

我能够在特定文件夹下更改dll和exes的产品版本。在完成所有dll和exes之后,完成此步骤。

  1. 使用Resource Hacker从exes / dll中提取* .RC文件:

    $ResourceHackerPath = "C:\Tools\resource_hacker\ResourceHacker.EXE"
    $Dllpath = "...\MySoftware\Mydll.dll" 
    $RCpath = "...\MySoftware\Mydll.RC"
    Start-Process -FilePath "`"$ResourceHackerPath`""  -ArgumentList "-extract `"$ProductPath`",`"$RCpath`",versioninfo,," -wait                                                                          
    
  2. 在* .RC文件中编辑产品版本:

    $OriProVer = (Get-Item -literalpath $Dllpath ).VersionInfo.ProductVersion
    $NewProVer = "Mysoftware 5.1 Beta 6"
    (Get-Content $Dllpath).Replace($OriProVer, $NewProVer ) | Set-Content $Dllpath
    
  3. 使用GoRC将* .RC文件格式更改为* .RES文件:

    Start-Process -FilePath "`"$GoRCPath`""  -ArgumentList "/r `"$RCpath`"" -wait
    
  4. 再次使用Resource Hacker将* .RES文件添加到dll或exes

    $RESpath = "...\MySoftware\Mydll.RES"
    Start-Process -FilePath "`"$ResourceHackerPath`""  -ArgumentList "-addoverwrite  `"$Dllpath `",`"$Dllpath `",`"$RESpath`", , ," -wait
    
  5. 您的dll产品版本应更新为您想要的任何字符串。

    额外提示,如果您想更新很多dll和exes产品版本: 你可以试试这个:

    1. 搜索特定文件夹下的所有dll和exes:

      $directory = "...\Desktop\New Folder"
      $FileNameList = Get-ChildItem -literalpath  $directory -Include *.dll, *.exe  -recurse | foreach-object { "{0}" -f [System.Diagnostics.FileVersionInfo]::GetVersionInfo($_).FileName}
      
    2. 在for循环中执行上述所有4个步骤:

      for ($i = 0;$i -lt $FileNameList.count;$i++){...}
      
    3. 谢谢&祝你有愉快的一天:)