2016-07-04 40 views
0

我是Powershell的新手。 我正在使用Power Shell腳本來構建VB​​6 dll。電源shell腳本 - 我們可以在創建時設置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」。 在此先感謝。

+0

從內存(和我沒有任何VB6更多的工作副本),沒有一個命令行選項來設置產品版本。您最好的選擇可能是腳本更新VBP文件或在構建之後使用實用程序設置版本號。 – OldBoyCoder

+0

嗨,感謝您的回覆:),我正在使用TFS服務器來運行它,我希望產品版本可以自動更新,最好的將會更新它,因爲我有很多dll和exes來自不同的編譯器需要更新。 –

回答

0

喜誰面臨類似問題的人,

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

我能夠改變一個特定的文件夾下的DLL和EXE文件產品版本。這一步是在所有的dll和exes都建好之後完成的。

  1. 使用Resource Hacker從中提取的EXE/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. 使用資源黑客再次向* .RES文件添加到DLL或EXE文件

    $RESpath = "...\MySoftware\Mydll.RES" 
    Start-Process -FilePath "`"$ResourceHackerPath`"" -ArgumentList "-addoverwrite `"$Dllpath `",`"$Dllpath `",`"$RESpath`", , ," -wait 
    

您的dll產品版本應更新到您想要的任何字符串。

額外的提示,如果要更新大量的DLL和EXE文件的產品版本:一個特定的文件夾下

  1. 搜索所有的DLL和EXE文件: 你可以試試這個

    $directory = "...\Desktop\New Folder" 
    $FileNameList = Get-ChildItem -literalpath $directory -Include *.dll, *.exe -recurse | foreach-object { "{0}" -f [System.Diagnostics.FileVersionInfo]::GetVersionInfo($_).FileName} 
    
  2. 否則在所有的4個步驟上述用於循環:

    for ($i = 0;$i -lt $FileNameList.count;$i++){...} 
    

感謝&有一個愉快的一天:)

相關問題