2013-10-08 3 views
0

В сценарии развертывания у нас возникла идея разрешить администратору изменять свойства в установщике и ProductCode. Затем администратор должен вытолкнуть новую команду msi с помощью политики групповой политики. Поскольку теперь это будет MajorUpgrade, старая версия со старыми свойствами должна быть удалена, а новая с новыми свойствами должна быть установлена.
Однако обновление ProductCode не работает.Как изменить ProductCode с помощью Microsoft.Deployment.WindowsInstaller?

При выполнении
db.Execute("UPDATE Property SET Value = '{30571D61-8994-449B-9725-90760DFE0467}' WHERE Property = 'ProductCode'")
исключение выбрасывается.
[Microsoft.Deployment.WindowsInstaller.InstallerException] = {"Function failed during execution. Database: C:\..\MyInstaller.msi Table(s) Update failed."}

Что нужно сделать для обновления ProductCode?
(Возможно ли это?)

Edit:
Если таблица открывается как ReadOnly, он будет показывать ошибку.
Какой был случай здесь.

ответ

1

В документации SDK указано, что ExecuteScalar может использоваться только для оператора SELECT, который возвращает один результат. Вместо этого вы должны использовать метод Execute.

using (Database database = new Database(@"C:\MSM\ISWIX.MSI", DatabaseOpenMode.Direct)) 
{ 
    database.Execute("UPDATE Property SET Value = '{00000000-0000-0000-0000-000000000000}' WHERE Property = 'ProductCode'"); 
} 

Также осознайте, что это невозможно сделать в качестве пользовательского действия во время установки, поскольку ProductCode является неизменным. Как правило, в сценарии MajorUpgrade вы назначаете новый ProductCode во время сборки/компиляции.

+0

К сожалению, это была опечатка. Я использую Execute. Я нашел ошибку. У моего класса-оболочки был инвертированный if, поэтому я открыл readonly, когда захотел изменить. – leiflundgren