2012-11-28 1 views
1

Je pensais que ce serait assez simple, mais j'ai des problèmes pour utiliser la classe PatchInstallation qui fait partie de Microsoft.Deployment.WindowsInstaller.Déterminez si un correctif est installé à l'aide de Microsoft.Deployment.WindowsInstaller.PatchInstallation

Après avoir obtenu le code de correctif et le code de produit corrects (code cible), j'appelle simplement la propriété IsInstalled, mais ArgumentNullExceptions est levée.

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

texte d'exception est:

System.ArgumentNullException message = valeur produite ne peut pas être nulle. Nom du paramètre: String = Source mscorlib ParamName = Chaîne
StackTrace: à System.Number.StringToNumber (String str, options NumberStyles, NumberBuffer nombre &, informations NumberFormatInfo, Boolean parseDecimal) à System.Number.ParseInt32 (String s , le style NumberStyles, informations NumberFormatInfo) à Microsoft.Deployment.WindowsInstaller.PatchInstallation.get_State() à Microsoft.Deployment.WindowsInstaller.PatchInstallation.get_IsInstalled() InnerException:

Si quelqu'un a des idées ce que je Je fais mal pl facilité faites le moi savoir! À la votre!

Répondre

1

Vous devez choisir un contexte avant de pouvoir obtenir l'état d'un correctif. Utilisez le constructeur à quatre arguments qui prend un UserContexts et choisissez UserManaged, UserUnmanaged ou Machine.

+0

J'ai déjà essayé d'utiliser le constructeur à quatre arguments en passant les userSid et UserContext. Je passe null pour userSid et j'ai essayé All, UserManaged, UserUnmanaged et Machine. Tous avec le même résultat de l'argument null d'exception lors de l'accès à la propriété IsInstalled. Il me semble que le constructeur manque un param pour PatchStates. –

+1

Si le contexte utilisateur n'est pas UserManaged, UserUnmanaged ou Machine, DTF utilise une fonction API MSI qui ne prend pas en charge l'obtention de l'état du correctif. Cependant, il existe un nombre d'erreurs que DTF ignore et renvoie null à la place. Je suggère de déboguer à travers l'appel DTF afin que vous puissiez voir le code d'erreur directement. –

Questions connexes