Question

J'ai un projet d'installation pour mon application .NET, et les deux installer / désinstaller fonctionnent très bien, s'ils sont laissés seuls pendant qu'ils travaillent.

Cependant, si quelqu'un annule la procédure de désinstallation en cours de traitement, l'annulation ne semble pas être traitées correctement, et à essayer de désinstaller à nouveau plus tard, l'utilisateur est accueilli avec une exception de référence null.

Je voudrais simplifier simplement la situation; Je voudrais supprimer la capacité de l'utilisateur d'annuler une désinstallation en cours. Cela peut-il être fait?

Merci, -Ben

Était-ce utile?

La solution

Oui, il est possible de le faire. MSDN liste plusieurs des options ; cependant, il est peut-être plus simple de patcher juste le fichier MSI créé par Visual Studio. Cela peut être fait en utilisant Orca (Vous trouverez un programme d'installation de cet outil dans le dossier Windows SDK généralement sous C: \ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ Bin \ Orca.msi).

Orca vous permet d'éditer les tables de base de données MSI. Pour masquer le bouton d'annulation vous devez ajouter un enregistrement à la table ControlCondition ( ici ):

Dialog        | Control      | Action   | Condition
------------------------------------------------------
ProgressForm  | CancelButton | Hide     | 1

Cette tâche manuelle d'ajouter un enregistrement à l'aide Orca est probablement mieux fait avec un court VBScript comme ça:

Set oMsi = CreateObject("WindowsInstaller.Installer")

' get path to msi from command line
strMsiFullPath = Wscript.Arguments(0)
' open transacted
Set oDB = oMsi.OpenDatabase(strMsiFullPath , 1)

' insert a record into the [ControlCondition][3] table
Set oView = oDB.OpenView("INSERT INTO `ControlCondition` " & _
    "(`ControlCondition`.`Dialog_`, `ControlCondition`.`Control_`," & _
     "`ControlCondition`.`Action`, `ControlCondition`.`Condition`) " & _
     "VALUES ('ProgressForm', 'CancelButton', 'Hide', '1')")

' clean up
oView.Execute: oView.Close: oDB.Commit
Set oMsi = Nothing

peut être ajouté Ce script comme une étape de post-construction à votre projet d'installation (Notez qu'il ya une faute de frappe dans la variable Visual Studio pour le chemin de sortie):

cscript $(ProjectDir)patch.vbs $(BuiltOuputPath)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top