2010-01-14 7 views
1

J'ai un projet d'installation pour mon application .NET, et les deux installation/désinstallation fonctionnent correctement, s'ils sont laissés seuls pendant qu'ils fonctionnent. Cependant, si quelqu'un annule la désinstallation pendant le traitement, la restauration ne semble pas être gérée correctement et, en essayant de désinstaller à nouveau plus tard, l'utilisateur est accueilli avec une exception de référence nulle.Personnalisation du programme de désinstallation du programme d'installation de VS 2008

Je voudrais juste simplifier la situation; Je souhaite supprimer la possibilité pour l'utilisateur d'annuler une désinstallation en cours. Cela peut-il être fait?

Merci, -Ben

Répondre

1

Oui, il est possible de le faire. Listes MSDN several options; cependant, il peut être plus simple de patcher le fichier MSI créé par Visual Studio. Cela peut être fait en utilisant Orca (Vous trouverez un installateur pour cet outil dans le dossier Windows SDK généralement sous C: \ Program Files \ Microsoft SDK \ Windows \ v6.0A \ Bin \ orca.msi).

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

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 

Ce script peut être ajouté 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) 
+0

Bonne réponse. Tu m'as définitivement orienté dans la bonne direction. Malheureusement, 'ProgressForm' n'est pas le dialogue qui montre la progression pendant la désinstallation. En fait, j'ai parcouru toutes les boîtes de dialogue dans la table de dialogue et ajouté des numéros aux titres afin que je puisse retrouver cette boîte de dialogue, sans aucune chance du tout. Je suppose que la boîte de dialogue de progression de la désinstallation n'est pas modifiable à l'aide de la table ControlCondition. Pourtant, j'apprécie la réponse car elle a ouvert beaucoup de possibilités de personnalisation pour moi. Merci :) – Ben

Questions connexes