2012-03-07 6 views
4

J'ai une application qui fonctionne 24/7 sans présence. Il est déployé via ClickOnce et doit vérifier et télécharger les mises à jour par lui-même. Il vérifie les mises à jour au démarrage de l'application et à l'heure planifiée la nuit. Quand il le fait au démarrage, cela fonctionne parfaitement bien.Déploiement de ClickOnce CheckForDetailedUpdate lève une exception

Toutefois, lorsqu'il le fait à l'heure planifiée, il se bloque. Dans les deux cas, il utilise exactement le même morceau de code. Il fonctionne sous Windows   7 et pourrait avoir quelque chose à voir avec UAC. Je pense que peut-être il ne peut pas accéder au système de fichiers lorsque l'ordinateur est à l'état inactif? J'ai vraiment besoin de réparer ça. Voici les détails d'exception:

Message:

Un privilège que le service a besoin pour fonctionner correctement ne existe dans la configuration du compte de service. Vous pouvez utiliser le composant logiciel enfichable Microsoft Management Console (MMC) Services (services.msc) et le composant logiciel enfichable MMC Paramètres de sécurité locaux (secpol.msc) pour afficher la configuration du service et la configuration du compte. (Exception de HRESULT: 0x80070511)

Trace de la pile:

at System.Deployment.Internal.Isolation.IStore.GetAssemblyInformation(UInt32 Flags, IDefinitionIdentity DefinitionIdentity, Guid& riid) 
at System.Deployment.Internal.Isolation.Store.GetAssemblyManifest(UInt32 Flags, IDefinitionIdentity DefinitionIdentity) 
    at System.Deployment.Application.ComponentStore.GetAssemblyManifest(DefinitionIdentity asmId) 
    at System.Deployment.Application.ComponentStore.GetSubscriptionStateInternal(DefinitionIdentity subId) 
    at System.Deployment.Application.SubscriptionStore.GetSubscriptionStateInternal(SubscriptionState subState) 
    at System.Deployment.Application.DeploymentManager.BindCoreWithAppId(Boolean blocking, FileStream& refTransaction, String& productName) 
    at System.Deployment.Application.DeploymentManager.BindCore(Boolean blocking, TempFile& tempDeploy, TempDirectory& tempAppDir, FileStream& refTransaction, String& productName) 
    at System.Deployment.Application.DeploymentManager.Bind() 
    at System.Deployment.Application.ApplicationDeployment.CheckForDetailedUpdate(Boolean persistUpdateCheckResult) 
    at AdvancedKiosks.Utils.Updating.Updater.get_UpdateAvailabilityStatus() 
    at AdvancedKiosks.Utils.Updating.Updater.get_CanUpdate() 
    at AdvancedKiosks.DKMS.ViewModel.MainViewModel.<.ctor>b__6() 
    at System.Threading.ThreadHelper.ThreadStart_Context(Object state) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Threading.ThreadHelper.ThreadStart() 

EDIT: Je pense que la cause pourrait être que le lecteur de disque dur tourne après un certain temps du système étant inactif. Est-il possible d'activer le disque dur par programmation avant de vérifier les mises à jour (en utilisant C#)?

+0

Ouvrez la boîte de dialogue des propriétés de votre tâche planifiée. Il existe un paramètre nommé 'Lors de l'exécution de la tâche, utilisez le compte utilisateur suivant:'. Votre compte utilisateur est-il sélectionné? Sinon, cela peut être la cause du problème. Changez-le à votre compte et je crois qu'il va résoudre le problème. – RLH

+0

J'ai le même problème avec une application graphique qui détecte les mises à jour et le redémarrage automatique. Chaque fois, il va planter au redémarrage avec cette erreur même. Comme il s'exécute interactivement, il doit (devrait) utiliser le compte de l'utilisateur actuel qui a le privilège administratif sur le système. – Newtopian

+0

Quelle version de Visual Studio utilisiez-vous? –

Répondre

4

Je vais mettre ce lien ici juste pour l'enregistrement: link to MSDN forum. Selon lui, c'est un bug dans les internes de ClickOnce qui provoque cette erreur à apparaître après certain nombre d'appels à la fonction CheckForDetailedUpdate().

Questions connexes