2016-07-04 4 views
0

Я новичок в Powershell. Я использую сценарий оболочки питания для создания библиотек VB6.Power shell script - можно ли установить версию продукта 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?

Я был в состоянии изменить динамические библиотеки и версию продукта Exes' под определенную папку. Этот шаг выполняется после создания всех библиотек dll и exes.

  1. Использование Resource Hacker для извлечения * .RC файл из Exes/DLLs: версия

    $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. Использование ресурсов Hacker снова добавить * .RES файл в DLLs или EXEs

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

ваших DLLS' версия продукта должна быть обновлена ​​до любой строки, которую вы хотите.

Дополнительные советы, если вы хотите обновить много версии библиотеки 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. Делая все 4 описанные выше действия в цикле:

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

Благодаря & есть хороший день :)