2014-12-24 2 views
-1

Добрый день Мне нужно изменить значения в таблице MSI Обычный выбор таблиц, чтобы разобрать, но вот проблема с изменением.Обновить значение в msi (powershell)

, например, выберите:

$WindowsInstaller = New-Object -com WindowsInstaller.Installer 
$Database = $WindowsInstaller.GetType().InvokeMember(“OpenDatabase”, “InvokeMethod”, $Null, $WindowsInstaller, ($msi_path,0)) 
$View = $Database.GetType().InvokeMember(“OpenView”, “InvokeMethod”, $Null, $Database, (“SELECT * FROM Control WHERE Control = 'LicenseText'”)) .... 

($ msi_path, 0), 0 открытую таблицу из чтения, если я стараюсь не 0 (1 или 2), я получаю сообщение об ошибке:

[MethodInvocationException: Exception calling "InvokeMember" with "5" argument(s): "OpenDatabase,DatabasePath,OpenMode"]

Кто-нибудь скажет мне, что может быть проблемой. Или, может быть, есть другой способ изменить значения в таблице, интересующие powershell.

ответ

1

Я собирался решить.

Является ли работа, стоимость обновления из таблицы Msi работает правильно

Function Change-MSIProperties($msi_path) { 
    $Database = $null 
    $View = $null 
    [int]$msiOpenDatabaseMode = 2 
    $WindowsInstaller = New-Object -com WindowsInstaller.Installer 
    $Database = $WindowsInstaller.GetType().InvokeMember('OpenDatabase', 'InvokeMethod', $Null, $WindowsInstaller, ($msi_path,$msiOpenDatabaseMode)) 
    $View = $Database.GetType().InvokeMember('OpenView', 'InvokeMethod', $Null, $Database, ('UPDATE Feature SET Feature.Level=1 WHERE Feature.Level=0')) 
    $View.GetType().InvokeMember('Execute', 'InvokeMethod', $Null, $View, $Null)| Out-Null 

    $View.GetType().InvokeMember('Close', 'InvokeMethod',$Null,$View,$Null) | Out-Null 
} 
Смежные вопросы