2017-04-10 28 views
1

Innoセットアップを使用してアプリケーションインストーラを構築しています。Innoセットアップ:アプリケーションの自動起動時にレジストリ設定が更新されない

インストール中に、複数の異なるアプリケーション(または同じアプリケーションの複数のバージョン)で使用される共通ファイル(DLLなど)を保存するPATHを提供するレジストリキーを追加します。

私はこの記事で提案された方法を使用しています:http://www.codeguru.com/cpp/w-p/dll/article.php/c99/Application-Specific-Paths-for-DLL-Loading.htm

私が持っている問題は、インストールが完了すると、ユーザがアプリケーションを自動実行できるということです。この例では、アプリケーションはPATHの場所にdllを見つけることができません。アプリケーションを閉じてエクスプローラから再起動すると、うまく動作します。

ファイルを標準の共有dllの場所に配置したくない場合、それらはすべてdllではなく、私のアプリケーションが使用しているdllのバージョンをより適切に制御したいと考えています。また、ファイルをアプリケーションインストールの.exeディレクトリに置くこともオプションではありません。私はまた、システム環境のパスにPATHを追加したくないのです(たとえ私が行ったとしても、おそらく同じ問題があると思われます)

アイデアはありますか?

+0

RTFMのケースだと思います!! http://www.jrsoftware.org/ishelp/index.php?topic=registrysection 私は[実行]セクションでshellexecコマンドを使用しましたが、問題を解決するようです。 –

+0

これのプロトコルは何ですか?質問を削除しますか?私はそれが私のような他の愚か者には役に立つかもしれないと考えます。少なくとも、アプリケーション固有のパスについてのヒントは実際には非常に有用であり、広範に参照されているとは思われません。 –

+0

私は間違ったリンクを投稿しました:http://www.jrsoftware.org/ishelp/index.php?topic=runsection "shellexec"フラグは、ユーザーをダブルクリックした場合と同じ方法でプログラムを実行しますエクスプローラのファイルです言い換えれば、インストーラプロセスの子ではなく、新しいプロセスを開始するので、環境の変化を認識します。これは、あなたが答えに書いたものに忠実であると思います。 –

答えて

1

背景と私の「現在の」解決策。私が追加しようとしているキーは、次のとおりです。

[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 

私の[ファイル名を指定して実行]で私が持っていたセクション:使用Inno Setup Helpあたりのよう

postinstall shellexec skipifsilent 

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

を私がするフラグを変更shellexecコマンド:

ファイルが開かれます...サムエクスプローラーでユーザーがファイルをダブルクリックした場合の方法です。

上記のMartinの答えに沿って、私は、インストーラのプロセスの子としてアプリケーションを起動するのとは異なり、shellexecが環境の変化を拾う新しいプロセスを生成するため、

+0

私はWindows 10、inno setup 5.5.5を使用しています。私は今、警告のために感謝しなければならないと思う。私は生きていく前にいくつかの人にテストをさせるでしょう。うまくいけば私はそれを後悔しません! –

関連する問題