2011-08-19 29 views
0

我有一個MSI安裝程序,在安裝程序退出前執行sql腳本的末尾運行c#自定義操作。我們決定做到這一點的最好方法是將sql腳本文件粘貼到與MSI文件相同的目錄中,並讓它以這種方式加載腳本。從安裝程序中找到installer exe在磁盤上的原始位置c#

問題是,安裝程序將自身複製到Windows \ system32,然後從那裏執行,所以無法找到原始目錄以執行腳本文件。任何幫助或想法,將不勝感激!

+0

你爲什麼要將安裝程序複製到系統文件夾中? – Amy

+1

我不是。它本身就是這樣做的。或者至少這似乎是這樣做的。當我寫出Directory.CurrentDirectory時,它顯示Windows/system32,即使我從HD上的某個隨機位置啓動它。任何人都可以解釋嗎? – itslittlejohn

+0

哇。有趣。 – Amy

回答

1

請問OriginalDatabase屬性對你有幫助嗎?

Windows安裝程序設置OriginalDatabase屬性,用於啓動安裝的安裝數據庫的路徑。如果從命令行啓動安裝,則該值取決於重新緩存包選項(-v標誌)是否存在於重新安裝模式屬性中。

+0

安裝程序將從另一個安裝文件啓動。這是否從命令行算起?它看起來應該爲我工作,雖然。我會在星期一嘗試。 – itslittlejohn

+1

@itslittlejohn我猜他們談論的是不同的語法:'msiexec/i product.msi'是第一種情況;第二種情況是'msiexec/x {PRODUCT-GUID}'。第一種情況對應於在Windows資源管理器中雙擊.msi文件時執行的操作。 –

+0

你知道第二種情況是指什麼嗎?這可能沒有關係,但我不知道如何分辨正在使用哪個案例。設置和msi都由安裝程序項目構建生成。 – itslittlejohn

0

在C#如果你正在編寫管理自定義操作,你應該使用Windows Installer XML的(WiX的)部署工具基金會(DTF)。您可以創建一個C#項目並將您的SQL文件添加爲項目內容,並將其打包並在運行時在當前目錄中提供。

順便說一下,假設(或不是)您正在使用MSSQL,WiX已經有了SQL腳本執行處理。

+0

我們決定與這個設置項目一起進行,因爲它不那麼複雜。在未來,看起來WiX雖然是一個很好的解決方案。在運行時添加腳本的問題(在任何情況下都很簡單)是腳本根據客戶端的不同而不同。所以我們希望能夠在我們給他們安裝程序時手動刪除它。 – itslittlejohn

+0

DTF CA的基本上是C++ DLL,所以你仍然可以在安裝項目中使用它們。作爲第一次運行的一部分,您可能還想考慮將其從安裝程序移到應用程序中。 –

+0

我已經用幾個腳本完成了這個工作,但是我們決定不使用這個特定的腳本的原因是每次安裝都不一樣,而且並不總是必需的。所以這增加了靈活性。感謝您的建議,但! – itslittlejohn

相關問題