2009-11-06 5 views
4

J'ai construit un setup.exe dans C# qui exécute plusieurs MSI chaînés (avec/QUIET/NORESTART). A la fin je voudrais vérifier si un redémarrage est nécessaire dans la machine (c'est-à-dire, si l'un des MSI a demandé un redémarrage).Comment savoir si un MSI que je viens d'installer a demandé un redémarrage de Windows?

Comment puis-je le détecter?

+0

J'ai même vu cet utilitaire: http://exodusdev.com/products/whyreboot qui sait non seulement qu'un redémarrage est nécessaire, mais aussi POURQUOI ... Comment puis-je récupérer ces informations par programme? Enregistrement? – Nestor

+0

Voir suite à cette question ici: http://stackoverflow.com/questions/1689610/how-to-detect-programmatically-when-the-install-updates-and-shut-down-the-comput – Nestor

Répondre

2

La clé de Registre suivante contient les informations:

HKLM\System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations

Source: http://technet.microsoft.com/en-us/sysinternals/bb897556.aspx

+0

J'ai un machine sans PendingFileRenameOperations montrant le petit bouclier dans le bouton "Shut down". Comment venir? – Nestor

+0

Est-ce que ce bouclier dans le bouton d'arrêt ne signifie pas "Installer les mises à jour et l'arrêt"? Ce n'est pas équivalent à un redémarrage requis. –

+0

ok ... savez-vous alors comment détecter le bouclier? J'ai mis cela comme une question distincte et quelqu'un s'est plaint qu'il s'agissait d'un doublon de celui-ci :-) – Nestor

1

Une autre façon d'y arriver est de vérifier les codes de sortie de tous les MSIs que vous exécutez dans votre code . Si un MSI a un code de sortie de 3010, il nécessite un redémarrage. (http://msdn.microsoft.com/en-us/library/aa368542.aspx).

En supposant que vous utilisez System.Diagnostics.Process pour exécuter le MSIs et après le processus a quitté, vous récupérerez le processus de sortie de code en utilisant la propriété ExitCode (http://msdn.microsoft.com/en-us/library/system.diagnostics.process.exitcode(v=vs.90).aspx). Par conséquent, vous pouvez simplement vérifier le code de sortie d'un processus MSI et lorsque vous avez terminé d'exécuter tous vos MSI, si l'un d'entre eux renvoie 3010, vous savez que vous devez redémarrer.

+1

J'ai appris que certains MSI n'utiliseront pas un code de sortie de 3010 si le système est déjà en attente de redémarrage lorsque vous exécutez le MSI. Le programme d'installation hors connexion .NET Framework 4.5.2 de Microsoft est un exemple d'un tel fichier MSI qui présente ce comportement. Il renvoie simplement un code de sortie de 0 si vous l'exécutez à nouveau sans avoir redémarré entre les exécutions du MSI. – afournier

+0

@ user16563 Merci pour l'info, c'est bon à savoir. Encore un autre excellent exemple de la façon dont Windows incompatibles incompatibles a tendance à fonctionner. :) – bsara

Questions connexes