2017-06-21 2 views
0

J'ai déjà défini le programme exécuté comme le démarrage de Windows, mais le programme ne peut fonctionner que lorsqu'il est exécuté en tant qu'administrateur dans Windows 10, quelqu'un peut-il me dire ce que je devrais ajouter dans le code pour définir cette? Voici mon code Wix:Wix set programme exécuté en tant qu'administrateur

Dans les modules de produits, il est

<ComponentRef Id="RegistryEntries"/> 

puis

<Fragment> 
    <DirectoryRef Id="ProgramFilesFolder"> 
     <Component Id="RegistryEntries" Guid="14fe9526-0da4-4761-ad27-8a77f145c6b5"> 
     <RegistryKey Root="HKCU" 
        Key="Software\Microsoft\Windows\CurrentVersion\Run" 
       Action="createAndRemoveOnUninstall"> 
      <RegistryValue Type="string" Name="March Networks Video Assistant" Value="[INSTALLFOLDER]March Networks Video Assistant.exe" KeyPath="yes"/>   
     </RegistryKey> 
     </Component> 
    </DirectoryRef> 
    </Fragment> 

Merci beaucoup à tout le monde.

Répondre

0

Le problème est que vous mettez cette clé de registre dans le HKCU qui exécutera des choses dans le contexte de l'utilisateur courant au démarrage.

Si vous souhaitez qu'il soit exécuté en tant qu'administrateur au démarrage, il doit être placé dans HKLM.

les opérations suivantes:

<Fragment> 
    <DirectoryRef Id="ProgramFilesFolder"> 
    <Component Id="RegistryEntries" Guid="14fe9526-0da4-4761-ad27-8a77f145c6b5"> 
     <RegistryKey Root="HKLM" 
       Key="Software\Microsoft\Windows\CurrentVersion\Run" 
      Action="createAndRemoveOnUninstall"> 
     <RegistryValue Type="string" Name="March Networks Video Assistant" Value="&quot;[INSTALLFOLDER]March Networks Video Assistant.exe&quot;" KeyPath="yes"/>   
     </RegistryKey> 
    </Component> 
    </DirectoryRef> 
</Fragment> 

avis ainsi j'ai changé HKCU à HKLM (cela pourrait provoquer des avertissements ICE lors de la compilation mais vous pouvez les ignorer sans risque). Si vous utilisez une installation par utilisateur, je ne sais pas si cela sera en mesure d'écrire la clé de registre, sauf si l'installation est exécutée en tant qu'administrateur ... Aussi, je mets &quot; autour de la valeur de votre RegistryValue, car il est toujours agréable d'envelopper chemins entre guillemets à cause des espaces.

Une autre bonne chose que vous pouvez faire est de mettre à jour la valeur du RegistryValue en utilisant le chemin d'installation du composant qui peut être référencé en utilisant la syntaxe suivante:

[#IDOfFile]

Donc, si votre composant définissant le « Réseaux Mars vidéo assistant.exe » <File> utilise Id = "MarchNetworksVideoAssistant.exe", vous pouvez mettre à jour la valeur de votre RegistryValue à

value="&quot;[#MarchNetworksVideoAssistant.exe]&quot;"

Vous pouvez obtenir une bonne explication de cette syntaxe here

Si une sous-chaîne de la forme [#filekey] se trouve, il est remplacé par le chemin complet du fichier, avec la valeur filekey utilisée comme une clé dans la table de fichiers. La valeur de [#filekey] reste vide et n'est remplacée par un chemin que lorsque le programme d'installation exécute l'action CostInitialize, l'action FileCost et l'action CostFinalize. La valeur de [#filekey] dépend de l'état d'installation du composant auquel appartient le fichier. Si le composant est exécuté à partir de la source, la valeur est le chemin d'accès à l'emplacement source du fichier. Si le composant est exécuté localement, la valeur est le chemin d'accès à l'emplacement cible du fichier après l'installation. Si le composant a un état d'action absent, l'état installé du composant est utilisé pour déterminer la valeur [#filekey]. Si l'état installé du composant est également absent ou nul, [#filekey] résout en une chaîne vide, sinon il se résout à la valeur en fonction de l'état installé du composant. Pour plus d'informations sur la vérification de l'état d'installation des composants, voir Vérification de l'installation des fonctions, composants et fichiers.

+0

Merci beaucoup Brian, c'était très utile! –