2014-09-01 2 views
0

J'ai une sorte d'appilcation Windows, fonctionnant sous Windows 7 32 bits. J'essaie d'enregistrer une commande particulière d'extension de fichier avec mon application en utilisant le registre Windows. Une telle extension de fichier est la mienne et également enregistrée par moi. L'application installée dans un sous-répertoire particulier au sein de Program Files. Je veux que mon installateur enregistre l'application correctement pour les platfroms 32 et 64 bits, puisque les noms de répertoire Program Files peuvent être différents sur les platfroms x86 et x64, alors que j'ai besoin de spécifier le chemin de mon application, j'utilise la redirection de registre %ProgramFiles%. Ici, je reproduis quels documents je fais au Registre:Windows 7 Registre% ProgramFiles% numéro

// file extension 
HKEY_CURRENT_USER 
    Software 
    Classes 
     .myext 
     Default REG_SZ myapp.myext 

// application 
HKEY_CURRENT_USER 
    Software 
    Classes 
    .myapp.myext 
     Shell 
     Open 
      Command 
       Default REG_SZ "%ProgramFiles%\path\to\my\app\myapp.exe" -u -i "%1" 

chemin réel pour programmer des fichiers dir dans ma machine de test est C:\Program Files Avec cet enregistrement, je reçois une erreur:

Windows cannot access the specified device path, or file. You may not have the appropriate permissions to access the item.

Si je remplace %ProgramFiles% avec réelle C:\Program Files tout fonctionne bien. Aussi quand j'utilise le même chemin: "%ProgramFiles%\path\to\my\app\myapp.exe" pour exécuter l'application de la console tout fonctionne bien aussi. Quelle peut être la raison d'un tel problème.

Répondre

1

% ProgramFiles% évalue le fichier programme 32 bits dir dans un processus 32 bits et le fichier programme 64 bits dir dans un processus 64 bits. Cependant, l'emplacement de votre exécutable ne dépend pas de la taille du shell, qui est la chose qui lit ces paramètres de registre. Vous voulez écrire la valeur suivante au Registre:

 
"C:\Program Files (x86)\path\to\my\app\myapp.exe" -u -i "%1" 

où je suppose que c'est le chemin vers les fichiers du programme 32 bits dir. Vous ne devriez pas écrire de variable d'environnement dans cette clé de registre. Votre programme d'installation connaîtra déjà le chemin complet de l'exécutable, et vous devriez simplement écrire cela. Un problème qui peut vous porter à confusion est que vous pensez peut-être que les répertoires des fichiers programme sont sujets à la redirection du système de fichiers. Ils ne sont pas. En outre, si vous avez besoin d'écrire une variable d'environnement dans le registre et que vous voulez qu'elle soit développée lors de la lecture, utilisez REG_EXPAND_SZ plutôt que REG_SZ.

+0

Oui, je voulais dire agrandir, pas rediriger – vard

Questions connexes