2010-01-10 65 views
0

我正在使用installshield 2010編寫基本的MSI安裝程序。 不同的公司會提供.reg文件,安裝程序會在運行時讀取並相應地更新註冊表。Installshield - 根據運行時給出的文件更新註冊表

我無法弄清楚如何實現這一點。

我試着用Installscript編寫腳本來完成這個任務,但是當這個腳本運行在不同的執行中時,我不知道如何到達setup.exe所在的源代碼目錄(和.reg文件)。

MSIGetproperty不起作用,所有我得到的SETUPEXEDIR是「」。

回答

2

在推遲執行期間,您無權訪問大多數屬性。您可以: 1.使用CustomActionData屬性傳遞所需的值。 2.使用即時自定義操作,使用它從REG文件中讀取的內容更新註冊表。這樣Windows安裝程序引擎將負責爲您回滾。

我也可以建議一個替代解決方案: 另一家公司將提供一個MST文件,其中註冊表包含應該在REG文件中的內容。然後使用指向MST的TRANSFORMS屬性執行安裝。這樣你可以免費回滾和卸載。

+0

1.我不能讓CustomActionData屬性。我總是得到「」 2.我嘗試使用立即自定義操作,它確實有效。 問題是它不回滾。 重塑MST,我不能要求公司這樣做。所以這不是我的選擇。 – Eldad 2010-01-10 14:48:09

+0

1.您是否正確使用CustomActionData? (請參閱http://msdn.microsoft.com/en-us/library/aa370543%28VS.85%29.aspx)。 2.如果立即自定義操作只是更新註冊表,則會爲您處理回滾。 – 2010-01-10 14:53:55

+0

1.我遵循這些指示: http://kb.flexerasoftware.com/selfservice/viewContent.do?externalID=Q112615 但我仍然得到空字符串。 2.我明白你的建議,我相信它會起作用。一個問題:.reg文件是可選的。如果沒有給出.reg文件,我不想更改註冊表。我怎樣才能實現它? – Eldad 2010-01-10 15:00:10

1

您可以一起使用Signature,DrLocator和AppSearch表將註冊表文件的位置放在某些公共屬性中。我們將其稱爲「MY_REG_FILE」。然後,將自定義操作的條件設置爲「MY_REG_FILE」。如果該文件實際上不存在,那麼該屬性將不會被設置,條件將評估爲false,並且該操作不會運行。

MSDN有使用三個表一起找到一個文件的例子 - http://msdn.microsoft.com/en-us/library/aa371552%28VS.85%29.aspx

+0

謝謝。我已經接受了Freund的建議,但您的解決方案看起來很有趣且簡單。 – Eldad 2010-01-26 07:49:29