我完成了我的軟件,但無法找到創建其設置的正確方法。在設置期間啓動Msiexec的自定義操作
我搜索了網頁,在這裏,但我發現只有舊的後期引用舊的視覺工作室版本。
正如我在VS 2013社區版中所知道的,我有一個有限的Installshield插件,我也能夠下載Visual Studio Installer插件。創建一個簡單的設置是相對容易的,但我需要在安裝過程中靜默安裝一個小軟件。該軟件是雙重間諜(微軟代理的更新版本)和開發人員建議啓動安裝了這種方式:
只需運行:
msiexec /i DoubleAgent_x86.msi /qb-!
您在安裝過程中(我認爲最好的地方應該是Commit事件)。
順便說一下,它不可能啓動.msi安裝程序與行動,我真的不明白創建自定義操作的最佳做法。
我讀了一些關於創建類的內容,但大多數文章都提到了Visual Studio 2008或Wix插件。我正在尋找一種在Visual Studio Installer或installshield中使用Msiexec的方法。
編輯:我發現這個解決方案,它的工作這麼好:https://msdn.microsoft.com/it-it/library/vstudio/d9k65z2d%28v=vs.100%29.aspx
這是一個在意大利,但很容易轉化成原來的語言(英語)與右上方的單選按鈕。它與Visual Studio安裝插件和VS社區版2013完美配合。
我目前沒有代碼發佈,因爲我只構建了他們的示例,但我會盡快發佈它,因爲msiexec用於隱藏安裝。
我創建了一個測試的WinForm項目,我添加了安裝程序類與此代碼:
[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Commit(IDictionary savedState)
{
base.Commit(savedState);
// Use ProcessStartInfo class
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.FileName = "msiexec.exe";
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = "/i DoubleAgent.msi /qb-!";
try
{
// Start the process with the info we specified.
// Call WaitForExit and then the using statement will close.
using (Process exeProcess = Process.Start(startInfo))
{
exeProcess.WaitForExit();
}
}
catch
{
// Log error.
}
}
我開了與Visual Studio安裝程序的設置。在主設置結束時,開始說有另一個安裝,但雙重代理不安裝。
再次編輯:我沒有管理權限來默默執行msiexec。我認爲,因爲Double Agent設置需要管理員權限。我不想使用清單來提升權限,那麼我認爲唯一的解決方案是顯示DoubleAgent安裝程序(如果是最小輸出的話)。
順便說我有這樣的代碼在形式上1按鈕的工作:
private void button1_Click(object sender, EventArgs e)
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = true;
startInfo.UseShellExecute = false;
startInfo.FileName = "msiexec.exe";
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = "/i DoubleAgent.msi /qn";
try
{
// Start the process with the info we specified.
// Call WaitForExit and then the using statement will close.
using (Process exeProcess = Process.Start(startInfo))
{
exeProcess.WaitForExit();
MessageBox.Show("Finish");
}
}
catch
{
// Log error.
}
}
但是,同樣的代碼在安裝過程中不起作用。
我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –
對不起約翰......感謝您的幫助 –