2017-02-09 6 views
-1

Я хочу добавить настраиваемое действие, которое вызывает VBScript из двоичной таблицы, используя powershell. Я искал везде, чтобы найти код powershell, чтобы сделать это, похоже, это VBScript. Я попытался сделать это сам, но это всегда ошибки. Кто-нибудь мог добавить файл в бинарную таблицу с помощью powershell? Был бы очень признателен за любую помощь. Вот то, что я до сих пор: Вот код, который я до сих пор: VBScriptДобавить файл в двоичную таблицу MSI с помощью powershell

Dim query 
query="INSERT INTO `Binary` (`Name`, `Data`) VALUES ('NewBlob', ?)" 
Set Installer = CreateObject("WindowsInstaller.Installer") 

Set Record = Installer.CreateRecord(1) 
Record.SetStream 1, "C:\Users\Admin\Desktop\coder\CA_Test.vbs" 

Set Database = Installer.OpenDatabase("C:\Users\Admin\Desktop\7z920.msi", 1) 

Set View = Database.OpenView(query) 
View.Execute Record 
Database.Commit 

Powershell

$windowsInstaller = New-Object -ComObject WindowsInstaller.Installer    
$database1 = $windowsInstaller.GetType().InvokeMember(
    "OpenDatabase", 
    "InvokeMethod", 
    $Null, 
    $windowsInstaller, 
    @($database1Path, $msiOpenDatabaseModeReadOnly) 
) 

$database2 = $windowsInstaller.GetType().InvokeMember(
    "OpenDatabase", 
    "InvokeMethod", 
    $Null, 
    $windowsInstaller, 
    @($database2Path, $msiOpenDatabaseModeTransact) 
) 
$query = "INSERT INTO ``Binary``(``Name``,``Data``) VALUES ('Callsetstatuskey', ?)" 
$View = $database2.GetType().InvokeMember(
    "OpenView", 
    "InvokeMethod", 
    $Null, 
    $database2, 
    ($query) 
) 

$Record = $windowsInstaller.GetType().InvokeMember ("CreateRecord", "InvokeMethod", $Null, $windowsInstaller, 1) 
$Record.GetType().InvokeMember("SetStream", "InvokeMethod", $Null, $windowsInstaller.Record, @($SetstausKeyPath, 1)) 

$View.GetType().InvokeMember("Execute", "InvokeMethod", $Null, $View, $Record)  
$View.GetType().InvokeMember("Close", "InvokeMethod", $Null, $View, $Null) 
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($View) | Out-Null                    

Там будет намного больше кода в сценарии PowerShell создают признаки, компоненты добавьте свойства ключей реестра и пользовательские действия. Все работает отлично, за исключением добавления файла в двоичную таблицу.

Спасибо, Джим

+0

Эй, спасибо за совет! – Jim

ответ

0

Джим, я думаю, что я ответил на ваш вопрос здесь: http://www.alkanesolutions.co.uk/2017/02/10/write-windows-installer-binary-stream-using-powershell/

$query = "INSERT INTO `Binary` (`Name`,`Data`) Values(?,?)" 
$View = $database2.GetType().InvokeMember("OpenView","InvokeMethod",$Null,$database2,($query)) 
$binaryrecord = $windowsInstaller.GetType().InvokeMember("CreateRecord", "InvokeMethod", $null, $windowsInstaller, 2) 
$binaryrecord.GetType().InvokeMember("StringData", "SetProperty", $null, $binaryrecord, @(1, "AlkaneBinary")) 
$fileToStream = "C:\Alkane\AlkaneFile.txt" 
$binaryrecord.GetType().InvokeMember("SetStream","InvokeMethod", $null, $binaryrecord, @(2, $fileToStream)) 
$View.GetType().InvokeMember("Execute", "InvokeMethod", $Null, $View, $binaryrecord) 
$View.GetType().InvokeMember("Close", "InvokeMethod", $Null, $View, $Null) 
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($View) | Out-Null 

Спасибо.

+0

спасибо !! Это сработало отлично! – Jim

 Смежные вопросы

  • Нет связанных вопросов^_^