2010-10-29 4 views
1

Nous avons une suite d'applications que nous mettons à jour via une application "Auto Update" développée par nos soins. Cette application se connecte essentiellement à notre "serveur de mises à jour" et télécharge les fichiers pour remplacer, mettre à jour ou même ajouter de nouvelles fonctionnalités/applications à notre suite d'applications. Cependant, cela ne fonctionne pas bien avec l'UAC. Notre application de mise à jour automatique est une application de ligne de commande .NET lancée via la clé de registre HKLM \ Software \ Microsoft \ Windows \ CurrentVersion \ Run.Application de mise à jour automatique de Windows 7 UAC

Le problème que nous avons est quand UAC est allumé notre application ne fonctionne pas. Il n'incite pas non plus les utilisateurs à autoriser l'exécution du programme. Quelles sont mes options pour contourner ce problème ou résoudre le problème?

Voici pas Options:
1. Allumez UAC - Politique d'entreprise
2. Utilisez ClickOnce - Ne supporte pas nos besoins (c'est pourquoi nous sommes allés Homegrown)

merci beaucoup.

Répondre

5

Vous pouvez demander l'élévation de l'UAC dans application manifest. Si vous spécifiez requireAdministrator, il appelle l'UAC, sauf si la stratégie de l'ordinateur empêche les invites UAC.

+0

Ainsi serait-ce efficace invite mes utilisateurs avec une boîte "Oui/Non" pour permettre à mon application de mise à jour automatique de s'exécuter? – Adam

+0

@Adam: oui, c'est ma compréhension. C'est le type "oui/non" de l'UAC "gray out", bien sûr. –

3

Vous êtes en avance sur le jeu car votre programme de mise à jour est un exe séparé. En plus de mettre un manifeste dessus comme suggéré par @Martin, idéalement, vous devrez également changer l'interface utilisateur de l'application principale. Activez un bouton/élément de menu qui dit "appliquer les mises à jour" ou affichez une interface utilisateur modale qui indique "les mises à jour obligatoires sont prêtes, cliquez sur OK pour continuer". Puis sur le bouton ou l'élément de menu ou le OK de l'interface utilisateur modale, decorate with a shield. Cela rappelle aux utilisateurs qu'ils recevront une invite UAC.

Votre code fonctionnera très bien sans cela, mais ils seront effrayés. Ils utilisent l'application, la surveillance du réacteur nucléaire ou l'approbation des comptes de dépenses ou autres et tout à coup - blam! - l'écran devient noir et ils reçoivent une invite - il y a un nom d'exe dessus mais personne ne le lit et ça pourrait ne pas expliquer beaucoup de toute façon.

UAC prompt

Il y a une bonne chance ce message non sollicité ne UAC obtenir le consentement de l'utilisateur. Donc, changer votre interface utilisateur pour l'expliquer est un meilleur moyen.

2

Idéalement, vous utiliseriez MSI comme programme d'installation/mise à jour - il sait si/comment élever.

Votre autre solution est de ShellExecute votre updater avec privelages administratives:

RunAsAsAdmin("C:\Users\Adam\AppData\Temp\ISW-1864.exe"); 

RunAsAdmin est un code qui sait comment exécuter un processus et d'élever dans le processus:

function RunAsAdmin(hWnd: HWND; filename: string; Parameters: string): Boolean; 
{ 
    See Step 3: Redesign for UAC Compatibility (UAC) 
    http://msdn.microsoft.com/en-us/library/bb756922.aspx 
} 
var 
    sei: TShellExecuteInfo; 
begin 
    ZeroMemory(@sei, SizeOf(sei)); 
    sei.cbSize := SizeOf(TShellExecuteInfo); 
    sei.Wnd := hwnd; 
    sei.fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI; 
    sei.lpVerb := PChar('runas'); 
    sei.lpFile := PChar(Filename); // PAnsiChar; 
    if parameters <> '' then 
     sei.lpParameters := PChar(parameters); // PAnsiChar; 
    sei.nShow := SW_SHOWNORMAL; //Integer; 

    Result := ShellExecuteEx(@sei); 
end; 
+0

"Idéalement, vous utiliseriez MSI comme installateur/programme de mise à jour" avez-vous un lien qui guiderait quelqu'un d'une manière basique? – hawbsl

+0

Si vous distribuez votre programme en tant que MSI, MSI sait déjà comment demander l'élévation. Ce que vous devez faire est de créer un programme d'installation MSI, auquel il y a des applications entières dédiées. Le plus populaire est WiX - Windows Installer XML Toolset (http://wix.sourceforge.net/manual-wix2/wix_index.htm) –

Questions connexes