在過去,我們使用高級安裝程序爲特定項目構建.msi安裝程序。我們每年的高級安裝許可已過期,因此爲了避免續訂成本,並且因爲我認爲使用Visual Studio可以實現同樣的目標,所以我嘗試使用Visual Studio 2010安裝項目來構建我的.msi。自定義操作不起作用 - Visual Studio安裝項目
大部分情況下,我用Visual Studio構建的安裝程序工作正常。但是,我們需要安裝程序執行的一件事是運行幾個.reg文件以將大量設置添加到註冊表中(可能值得注意的是,這是舊軟件,它只是在維護和更新之前一直存在將在不久的將來被完全取代,改變我們存儲設置的方法是不切實際的)。使用高級安裝程序,我們能夠執行一個.cmd文件作爲「安裝」自定義操作,該操作將運行這些.reg文件,這些文件也包含在安裝中。 VS安裝項目有自定義操作,但現在看來,在這裏,他們需要是要麼.dll文件或的.exe文件,所以我必須找到一個替代使用.BAT或.CMD文件。
首先,我嘗試添加一個命令行項目,我的解決方案,僅包括在main()方法,下面幾行:
using (Process registryInput = Process.Start("regedit.exe", "/s Settings1.reg"))
{
registryInput.WaitForExit();
}
using (Process registryInput= Process.Start("regedit.exe", "/s Settings2.reg"))
{
registryInput.WaitForExit();
}
我加入這個項目的主輸出的「安裝」 「自定義操作」編輯器的文件夾。試圖運行安裝程序,但命令行過程似乎從未運行,也沒有安裝註冊表設置。如果我手動從安裝它的應用程序目錄運行命令行可執行文件,它會按照預期添加註冊表項 - 所以問題不在於我用來調用.reg文件的代碼。
我轉向MSDN並更改我的解決方案,將其模擬爲Custom Actions Walkthrough。我創建了一個類庫項目(並刪除了我的命令行項目)並添加了一個安裝程序類。我們沒有在Commit()方法中使用Microsoft的網站URL來啓動瀏覽器,而是將其代碼添加到了Install()方法中。以下是我結束了:
[RunInstaller(true)]
public partial class Installer1 : System.Configuration.Install.Installer
{
public Installer1()
{
InitializeComponent();
}
[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);
using (Process registryInput = Process.Start("regedit.exe", "/s Settings1.reg"))
{
registryInput.WaitForExit();
}
using (Process registryInput = Process.Start("regedit.exe", "/s Settings2.reg"))
{
registryInput.WaitForExit();
}
}
[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Commit(IDictionary savedState)
{
base.Commit(savedState);
}
[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Rollback(IDictionary savedState)
{
base.Rollback(savedState);
}
[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Uninstall(IDictionary savedState)
{
base.Uninstall(savedState);
}
}
我加入這個新的類庫項目的主輸出的「自定義操作」編輯器的「安裝」文件夾中。但是,當我運行安裝程序時,代碼似乎不會被執行,並且我的註冊表設置不會被添加。我曾嘗試將此安裝程序設置爲「爲所有用戶安裝」和「僅限此用戶」。
任何幫助,以獲得此自定義操作工作或替代方法來獲取.reg文件安裝上運行將不勝感激。先謝謝你。
您可以使用'cmd.exe/c .cmd'運行.cmd或.bat文件。 –
2011-06-01 18:28:09
嘗試使用詳細日誌記錄運行安裝:'msiexec/i product.msi/l * vx product.log'。該日誌文件將具有用於執行自定義操作的命令行。 – 2011-06-01 18:31:16
至少在VS2005中,它不會讓你輸入「cmd.exe/c.cmd」作爲運行命令,你必須從文件夾瀏覽器中選擇文件:( –
gollumullog
2011-07-12 21:02:54