2017-04-10 1 views
1

J'utilise Inno setup pour créer un programme d'installation d'application. Pendant l'installation, j'ajoute une clé de registre qui fournit un PATH où je stockerai des fichiers communs (DLL, etc.) qui pourraient être utilisés par plusieurs applications différentes (ou plusieurs versions de la même application!).Inno Setup: Le paramètre de registre ne se met pas à jour lors du démarrage automatique de l'application

J'utilise la méthode proposée dans cet article: http://www.codeguru.com/cpp/w-p/dll/article.php/c99/Application-Specific-Paths-for-DLL-Loading.htm

Le problème que j'ai est que lorsque l'installation est terminée, l'utilisateur peut automatiquement exécuter l'application. Dans ce cas, l'application ne trouve pas les DLL dans l'emplacement PATH. Si je ferme l'application et la relance à partir de l'explorateur cela fonctionne très bien. Je ne veux pas placer les fichiers dans des emplacements de DLL partagés standard, ils ne sont pas tous des DLL, et je veux un meilleur contrôle des versions de dll que mes applications utilisent. De plus, mettre les fichiers dans le répertoire d'installation de l'application .exe n'est pas une option non plus. Je ne veux pas non plus ajouter le PATH au chemin de l'environnement système (même si je l'ai fait, je suppose que j'aurais probablement le même problème de toute façon!)

Des idées?

+0

Un cas de RTFM je pense !! http://www.jrsoftware.org/ishelp/index.php?topic=registrysection J'ai utilisé la commande shellexec dans la section [run], cela semble résoudre le problème. –

+0

Quel est le protocole pour cela? Supprimer la question? Je pense que cela pourrait être utile pour un autre imbécile comme moi. Au moins, je pense que l'astuce sur les chemins spécifiques à l'application est en fait très utile et n'apparaît pas trop référencée. –

+0

Ye J'ai posté le mauvais lien: http://www.jrsoftware.org/ishelp/index.php?topic=runsection Le drapeau "shellexec" exécute le programme "de la même manière que si l'utilisateur double-cliquait le fichier dans l'Explorateur. " En d'autres termes, il démarre un nouveau processus, pas un enfant du processus d'installation, de sorte qu'il prend en compte les changements de l'environnement, ce qui, je suppose, adhère à ce que vous mettez dans votre réponse. –

Répondre

1

Un peu d'arrière-plan et ma solution 'actuelle'. Key Je suis en train d'ajouter est:

[Registry] 
Root: HKLM; Subkey: "SOFTWARE\Microsoft\..\App Paths\{#ExeName}.exe"; ValueType: string; ValueData: "{app}"; Flags: uninsdeletekey 
Root: HKLM; Subkey: "SOFTWARE\Microsoft\..\App Paths\{#ExeName}.exe"; ValueType: string; ValueName: "Path"; ValueData: "{#CommonPath}"; Flags: uninsdeletekey 

Dans ma section [run] J'ai eu:

Filename: {app}\{#ExeName}.exe; Description: {cm:LaunchProgram,{#AppName}}; Flags: nowait postinstall skipifsilent 

J'ai changé les drapeaux pour:

postinstall shellexec skipifsilent 

Comme par Inno Setup Help en utilisant la commande shellexec:

Le fichier s'ouvrira ... le sam Ce serait le cas si l'utilisateur double-cliquait sur le fichier dans l'Explorateur.

Le long des lignes de la réponse de Martin ci-dessus, je crois que cela fonctionne parce que ShellExec engendre un nouveau processus qui capte les changements de l'environnement, à la différence si je lance l'application comme un enfant du processus de l'installateur.

+0

Je suis sur windows 10, inno setup 5.5.5 s'il fait n'importe quelle differene.Je suppose que pour l'instant je dois juste dire merci pour l'avertissement. Je vais tester quelques personnes avant d'aller vivre. J'espère ne pas le regretter! –