0

Je développe un projet d'installation de studio visuel. Jusqu'à présent tout a été bon sauf la désinstallation. Le programme n'a pas créé son propre programme de désinstallation, mais la fonction de désinstallation se trouve à l'intérieur de setup.msi. Donc, ce que je dois faire est pendant l'installation, j'ai besoin de copier le setup.msi en cours d'exécution dans le [TARGETDIR]. La façon la plus simple de penser est d'utiliser des actions personnalisées. Je suis assez perdu sur les actions personnalisées, je ne comprends pas où ils vont et chaque fois que j'essaie de coder un, c'est plein d'erreurs. En regardant d'autres questions et réponses, j'ai trouvé ce qui suit:Configuration de Visual Studio, action personnalisée pour copier le fichier d'installation

[RunInstaller(true)] 
public partial class CustomInstaller : System.Configuration.Install.Installer 
{ 
    public override void Install(System.Collections.IDictionary stateSaver) 
    { 
     base.Install(stateSaver); 
     string path = this.Context.Parameters["targetdir"]; 
     // Do something with path. 
    } 
} 

Mais je ne comprends pas. Je vois comment ça obtient targetdir car cela est passé via le customactiondata. Mais, RunInstaller n'est pas connu, ni System.COnfiguration.Install.Installer. Où suis-je censé mettre ce fichier .cs pour le faire fonctionner? Très confus.

Répondre

1

Cette classe doit être placée dans votre projet d'application. Je crois qu'il peut être inclus dans n'importe quel projet dont DLL est empaqueté par le projet d'installation, mais il est généralement plus logique de le mettre dans le projet d'application.

Assurez-vous que votre projet d'application fait référence à System.Configuration.Install.dll. Cela va résoudre la référence à Installer.

RunInstaller est dans l'espace de noms System.ComponentModel (System.dll), assurez-vous que vous avez une instruction using System.ComponentModel en haut du fichier de classe.

Cette question peut vous aider à comprendre les actions personnalisées plus:

Why won't my Setup Project Perform my Custom Registration Process

+0

Ok, c'est logique. Attendez, je ne peux pas ajouter juste un fichier .cs. Dois-je l'écrire en vbs à la place? – Kyle

+0

Si votre projet est VB et non C# alors oui, vous pouvez l'écrire en VB. Lorsque vous ajoutez un élément à votre projet, il doit y avoir un modèle de classe d'installation. Cela vous aidera à démarrer. – Keith

+0

Mon projet est C#. – Kyle

1

Cela pourrait vous aider à démarrer, même si elle ne couvre pas les classes d'installation.

https://www.simple-talk.com/dotnet/visual-studio/getting-started-with-setup-projects/

Erreur 2835 est une erreur bogus liée à essayer de montrer une boîte de dialogue, probablement la boîte de dialogue d'erreur, il est donc masquer tout ce qui a mal tourné, très probablement votre code.

Faire un journal à l'aide msiexec/I/l * v et recherchez votre erreur avant l'2835.

Vous passez cette valeur targetdir à votre action personnalisée comme une liste d'arguments, vous dirais que/targetdir = "[TARGETDIR] \" et cela est sensible à la casse et inclut les crochets. C'est difficile parce qu'il est fusionné avec d'autres arguments.

Prenez garde que votre code ne s'exécute pas dans un contexte d'application. C'est un appel du processus msiexec qui s'exécute avec le compte système et un répertoire de travail de sysetm32. Cela signifie que les chemins complets doivent être spécifiés et que toute utilisation d'un élément spécifique au profil (comme le bureau, l'emplacement du profil utilisateur) échouera.

Questions connexes