Определете дали корекцията е инсталирана с помощта на Microsoft.Deployment.WindowsInstaller.PatchInstallation

Мислех, че това ще бъде доста лесно, но имам проблеми с използването на класа PatchInstallation, който е част от Microsoft.Deployment.WindowsInstaller.

След като получих правилния код на корекцията и кода на продукта (targetcode), аз просто извиквам свойството IsInstalled, но ArgumentNullExceptions се хвърлят.

PatchInstallation patchInstallation = new PatchInstallation(patchCode.ToString("B"), productCode.ToString("B"));
return patchInstallation.IsInstalled;

Текстът за изключение е:

System.ArgumentNullException occurred Message=Стойността не може да бъде нула. Име на параметър: String Source=mscorlib ParamName=String
StackTrace: at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) в Microsoft.Deployment.WindowsInstaller.PatchInstallation.get_State() в Microsoft.Deployment.WindowsInstaller.PatchInstallation.get_IsInstalled() InnerException:

Ако някой има някакви идеи какво правя погрешно, моля да ме уведоми! наздраве!


person Ben Cawley    schedule 28.11.2012    source източник


Отговори (1)


Трябва да изберете контекст, преди да можете да получите състоянието на корекцията. Използвайте конструктора с четири аргумента, който приема UserContexts и изберете един от UserManaged, UserUnmanaged или Machine.

person Bob Arnson    schedule 28.11.2012
comment
Вече се опитах да използвам конструктора с четири аргумента, предаващ userSid и UserContext. Подавам null за userSid и съм пробвал All, UserManaged, UserUnmanaged и Machine. Всички с един и същ резултат от аргумент null изключение при достъп до свойството IsInstalled. Изглежда ми, че в конструктора липсва параметър за PatchStates. - person Ben Cawley; 29.11.2012
comment
Ако потребителският контекст не е UserManaged, UserUnmanaged или Machine, DTF използва MSI API функция, която не поддържа получаване на състоянието на корекцията. Има обаче произволен брой грешки, които DTF игнорира и вместо това връща нула. Бих предложил отстраняване на грешки чрез DTF извикването, за да можете да видите директно кода на грешката. - person Bob Arnson; 30.11.2012