2017-04-10 121 views
1

我使用Inno setup來構建應用程序安裝程序。Inno Setup:自動啓動應用程序時註冊表設置不更新

在安裝期間,我添加了一個註冊表項,該註冊表項提供了一個PATH,我將存儲可能被多個不同應用程序(或同一應用程序的多個版本)使用的公用文件(dll等)。

我使用本文中提出的方法: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 我在[run]部分使用了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 

在我的[運行]部分我有:使用

postinstall shellexec skipifsilent 

Inno Setup Help

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

我改變了標誌,以shellexec命令:

該文件將被打開...山姆如果用戶在資源管理器中雙擊該文件,方式就是這樣。

沿着上面馬丁的回答的線,我相信它的作品,因爲shellexec產生一個新的進程,其拾取環境的變化,不像如果我啓動應用程序的安裝程序的過程中的一個孩子。

+0

我在Windows 10上,inno setup 5.5.5如果它使任何differene。我想現在我不得不說,謝謝你的警告。我會在上線前讓幾個人來測試。希望我不會後悔的! –

相關問題