RestartManager ne parvient pas à redémarrer l'application pendant la mise à jour

Je suis à l'aide de c#, .net 4, WIX 3.5, Windows Vista.
J'ai fait mon application compatible avec RestartManager par p/invoquant la RegisterApplicationRestart méthode et par la manipulation de la WM_QUERYENDSESSION et WM_ENDSESSION fenêtre des messages (je retourne new IntPtr(1);).

Si j'essaie de mettre à jour mon application manuellement, puis tout fonctionne comme il se doit:

  1. De lancement de l'application;
  2. Lancer msi fichier contenant la nouvelle version de l'application;
  3. Lors de l'installation/de mise à jour, je suis invité à fermer l'application en cours d'exécution;
  4. Lors de la poursuite de l'application en cours d'exécution est fermé, l'installation se termine, et que l'application est redémarrée;

Si j'essaie de mettre à jour mon application à partir de l'application elle-même, puis-je rencontrer des problèmes:

1) Lancement de l'application;
2) Télécharger le nouveau fichier msi;
3) Lancer le fichier msi avec:

    using (System.Diagnostics.Process p = new System.Diagnostics.Process())
    {
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.FileName = "msiexec";
        p.StartInfo.Arguments = "/i \"" + downloadPath + "\" /passive";
        p.StartInfo.UserName = "Administrator";
        p.StartInfo.Password = securePassword;
        p.Start();
    }

4) Parce que je suis en utilisant le mode passif, l'application se ferme automatiquement;
5) Après l'installation, ma demande n'est pas redémarré et en vertu de l'Observateur d'Événements, j'ai un
Événement 10007 - Application ou d'un service 'MyApp' ne peut pas être redémarré.

J'ai essayé:

  1. De ne pas utiliser le mode passif pour msiexec;
  2. Lancement msiexec via cmd.exe (cmd.exe /C "msiexec /i ....") dans l'espoir que le lancement de msiexec à partir d'un autre processus permettrait de résoudre le problème;
  3. Attendre 60 secondes avant de lancer la mise à jour msi (il ne devrait pas être pertinentes dans mon scénario, mais la documentation MSDN a quelque chose à ce sujet...)

Mais aucune de ces réponses a travaillé (toujours le même résultat).

Avoir à lancer le programme d'installation avec des autorisations élevées pourrait avoir quelque chose à voir avec la question, parce que pendant le manuel de mise à jour, je reçois un avertissement dans l'Observateur d'Événements - Application MyApp (pid 3220) ne peut pas être redémarré - Application SID ne correspond pas à Conducteur SID.
Malgré cela, le redémarrage de l'appli fonctionne toujours. Googleing l'avertissement ne donne aucun bon/résultats spécifiques, seulement que cet avertissement est probablement causée par l'exécution de la msi en hauteur, à l'invite de commandes.

Comment puis-je corriger (ou solution) ce problème, afin que je puisse mettre à jour mon application à partir de l'application elle-même et de redémarrer ma demande par la suite?

Edit - test supplémentaire:

  1. Il ne semble pas nécessaire de répondre à WM_QUERYENDSESSION et WM_ENDSESSION messages, car redémarrage de l'application lors d'une mise à niveau manuelle fonctionne sans eux, afin que nous puissions règle;
  2. Si je n'ai pas de fournir des informations d'identification d'administrateur pour l'application lancé la mise à niveau et au lieu que je les taper pendant la mise à niveau, puis app redémarrage des travaux;
  3. Si je lance une invite de commande élevée, et lancer une application de mise à niveau à partir de là (manuellement), puis app redémarrage fonctionne toujours;
  4. Dans l'ordre pour la mise à niveau des applications de travailler à tous les sous comptes d'utilisateur Standard (jusqu'à présent j'ai testé sous un compte Administrateur avec le contrôle de compte d'utilisateur), puis j'ai aussi de définir p.StartInfo.LoadUserProfile = true;. Sinon rien ne se passe. (redémarrage de l'application ne fonctionne toujours pas bien);
  5. J'ai essayé tous les autres processus StartInfo paramètres que je pourrais le mettre - WorkingDirectory, Rediriger, Verbe
    (= "runas") - pas de changement dans les résultats;
  6. J'ai installé Vista SP2 sur la machine virtuelle que j'ai été tester sur (mesure couru SP1), mais pas de changement;
  7. J'ai effectué un "automatique" de l'application de mise à niveau avec l'enregistrement détaillé. À la fin, il y a un message d'erreur - GESTIONNAIRE de REDÉMARRAGE: Échec lors du redémarrage des applications. Erreur: 352. Que le code d'erreur est très générique (http://msdn.microsoft.com/cs-cz/library/aa373665), afinde pour obtenir des informations plus détaillées que j'aurais à écrire mon propre programme d'installation qui permettrait d'attirer RmGetList après l'erreur, alors je pourrais obtenir plus de détails (ce qui est bien quelque chose que je ne suis pas prêt à le faire);

Edit 2 - msi fichier journal:
http://mommi.planet.ee/muu/log.txt

Avez-vous essayé d'utiliser MSI directement l'API MsiInstallProduct? Malheureusement, je ne connais pas son équivalent dans le .Net de l'environnement.
Je n'ai pas essayé MSI API avant, mais je lui ai donné un rendez-vous. Deux problèmes - 1) Que l'API ne les supporte pas RestartManager (il me demande de redémarrer l'ordinateur); 2) Il ne semble pas être un moyen de passer dans les privilèges d'administrateur (un must dans mon scénario).
pourriez-vous nous fournir un fichier journal de l'installation msi. vous pouvez le sortir de msiexec en ajoutant le paramètre "/l*v %temp%\mylog.journal". qui pourrait nous donner un indice sur il problème
poste de contrôle pour modifier le fichier de log. Étrange que, dans le milieu, il y a une erreur qu'il ne pouvait pas supprimer le dossier dans Program Files. Si je procéder régulièrement à désinstaller, puis le dossier est definently enlevé...

OriginalL'auteur Marko | 2011-10-23