Saturday, 11 March 2017

Msiexec Waitforexit Vb

Je développe une application de bureau utilisant VB, similaire au programme addremove. Tout fonctionnait bien jusqu'à ce que je commence à travailler sur la fonctionnalité de désinstallation. Maintenant, qu'est-ce que je fais, c'est que je reçois la chaîne de désinstallation de l'application spécifique à partir du Registre et utiliser System. Diagnostics. Process pour exécuter UninstallString. Dernier j'ai trouvé qu'il ne fonctionne que pour les chemins de fichiers droits seulement, je veux dire sans argument de ligne de commande comme: Je fais une liste de la liste de tous les UninstallStrings de toutes les applications installées sur ma machine. J'ai trouvé peu de choses comme l'application installée à l'aide de MSI, certains étaient avec rundll32 et quelques étaient avec le chemin de fichier droit avec un argument de commande comme: Mon Silverlight SDK UninstallString, Exemple MSI Mon JetAudio UninstallString, RunDll32 Exemple 1Ctor. dll, LaunchSetupquotC: Program FilesInstallShield Informations d'installation Setup. exequot - l0x9 Mon Google Chrome UninstallString, chemin de fichier droit avec l'exemple d'argument de commande quotC: Program FilesGoogleChromeApplication5.0.375.55Installersetup. exequot - uninstall Le code que j'ai mentionné ci-dessus ne fonctionne pas pour ceux-ci. J'ai fait un peu d'analyse de chaîne, séparer deux chose de UninstallString est Filename et d'autres est Arguments. Comme pour MSI, nom de fichier est MSIEXEC. EXE et l'argument sera reste de la chaîne, même pour RunDLL32, même pour le chemin de fichier droit avec argument de commande. Maintenant, qu'est-ce que je suis confronté, c'est que, après tous les 2 ou 3 jours, je viens de savoir que ce type de unistallstring est également ne fonctionne pas. Et pourquoi est-ce que cela ne fonctionne pas car il s'agit d'un nouveau type peut-être abc C: programme filessomeapp. exe - ddd donc l'analyser aussi. Y at-il une meilleure façon de le faire plutôt que d'analyser la chaîne. Modifié par Sakhawat Ali samedi, 29 mai 2010 15h18 Formating Samedi, 29 mai 2010 15h12 gt et Microsoft. VisualBasic. dll ne font pas partie de Framwork. Il est toujours installé dans le cadre. Les programmes VB utilisent cet ensemble en interne pour certaines opérations, même si vous ne lui faites pas d'appels spécifiques. La seule raison pour laquelle je peux penser à ne pas l'utiliser serait si vous pensez que c'est uglylegacy. Dans cette situation, vos choix sont fondamentalement d'analyser la chaîne de caractères dans son nom de fichier et les composants arguments OU PInvoke l'API CreateProcess spécifiant NULL pour lpApplicationName et la ligne de commande complète pour lpCommandLine. Marqué comme réponse par Sakhawat Ali samedi 29 mai 2010 21h37 samedi 29 mai 2010 21h13 Legacy est le point principal que je ne veux pas l'utiliser. Je pense donc qu'il vaut mieux analyser. Je me demande pourquoi ils n'ont pas fourni une telle chose dans Framework (à l'exception de Microsoft. VisualBasic. dll). En tout cas merci, c'était agréable d'avoir une discussion avec vous. Marqué comme réponse par Sakhawat Ali samedi, 29 mai 2010 21h38 samedi 29 mai 2010 21h37 Toutes les réponses gt j'ai trouvé qu'il ne fonctionne que pour les chemins de fichiers droits uniquement Vous devez mettre les arguments dans proc. StartInfo. Arguments . Gt et Microsoft. VisualBasic. dll ne font pas partie de Framwork. Il est toujours installé dans le cadre. Les programmes VB utilisent cet ensemble en interne pour certaines opérations, même si vous ne lui faites pas d'appels spécifiques. La seule raison pour laquelle je peux penser à ne pas l'utiliser serait si vous pensez que c'est uglylegacy. Dans cette situation, vos choix sont fondamentalement d'analyser la chaîne de caractères dans son nom de fichier et les composants arguments OU PInvoke l'API CreateProcess spécifiant NULL pour lpApplicationName et la ligne de commande complète pour lpCommandLine. Marqué comme réponse par Sakhawat Ali samedi 29 mai 2010 21h37 samedi 29 mai 2010 21h13 Legacy est le point principal que je ne veux pas l'utiliser. Je pense donc qu'il vaut mieux analyser. Je me demande pourquoi ils n'ont pas fourni une telle chose dans Framework (à l'exception de Microsoft. VisualBasic. dll). En tout cas merci, c'était agréable d'avoir une discussion avec vous. Marqué comme réponse par Sakhawat Ali Samedi, 29 mai 2010 21h38 Samedi 29 mai 2010 21h37 Regardez tous les avertissements sur la page de documentation de Shell. Lorsque le système le divise, il peut y avoir une possibilité d'ambiguïté d'où le nom du programme se termine, et la documentation montre comment cela peut avoir des ramifications de sécurité. Samedi 29 mai 2010 22h48 Oui, en utilisant la fonction Shell pour le faire, mais comment attendre jusqu'à ce que le programme de désinstallation soit terminé mercredi 12 février 2014 12:07 Microsoft mène actuellement un sondage en ligne pour comprendre votre opinion sur le Msdn site Web. Si vous choisissez de participer, le sondage en ligne vous sera présenté lorsque vous quitterez le site Web Msdn. Voulez-vous participerProcess. WaitForExit (Int32) WaitForExit (Int32) fait que le thread actuel attend que le processus associé se termine. Il devrait être appelé après toutes les autres méthodes sont appelées sur le processus. Pour éviter de bloquer le thread en cours, utilisez l'événement Exited. Cette méthode demande au composant Process d'attendre un temps fini pour la sortie du processus. Si le processus associé ne se termine pas à la fin de l'intervalle parce que la demande de terminaison est refusée, false est renvoyé à la procédure d'appel. Vous pouvez spécifier un nombre négatif (Infinite) pendant des millisecondes. Et Processus. WaitForExit (Int32) se comportera comme la surcharge WaitForExit (). Si vous passez 0 (zéro) à la méthode, il renvoie true seulement si le processus a déjà quitté sinon, il renvoie immédiatement false. Dans le Framework 3.5 et versions antérieures, si millisecondes était -1, la surcharge WaitForExit (Int32) a attendu MaxValue millisecondes (environ 24 jours), pas indéfiniment. Lorsque la sortie standard a été redirigée vers les gestionnaires d'événements asynchrones, il est possible que le traitement de sortie ne soit pas terminé lorsque cette méthode retourne. Pour vous assurer que la gestion des événements asynchrones est terminée, appelez la surcharge WaitForExit () qui ne prend aucun paramètre après avoir reçu un vrai de cette surcharge. Pour vous assurer que l'événement Exited est géré correctement dans les applications Windows Forms, définissez la propriété SynchronizingObject. Lorsqu'un processus associé se ferme (il est arrêté par le système d'exploitation par une terminaison normale ou anormale), le système stocke les informations administratives sur le processus et retourne au composant WaitForExit (Int32). Le composant Process peut alors accéder aux informations, y compris le ExitTime. En utilisant le handle pour le processus quitté. Étant donné que le processus associé a quitté, la propriété Handle du composant ne pointe plus vers une ressource de processus existante. Au lieu de cela, le handle peut être utilisé uniquement pour accéder aux informations système d'exploitation sur la ressource de processus. Le système est conscient des poignées vers les processus quitté qui n'ont pas été libérés par les composants Process, de sorte qu'il conserve les informations ExitTime et Handle en mémoire jusqu'à ce que le composant Process libère spécifiquement les ressources. Pour cette raison, chaque fois que vous appelez Démarrer pour une instance de processus, appelez Close lorsque le processus associé est terminé et vous n'avez plus besoin d'informations administratives à ce sujet. Fermer libère la mémoire allouée au processus quitté.


No comments:

Post a Comment