http://blog.csdn.net/zexin1000/article/details/7565393
方法一:
建立安裝部署這部分就不用說了,添加安裝部署項目後,滑鼠右鍵安裝項目->視圖->註冊表, 要使軟體在開機就運行,可以在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run中添加索引值儲存軟體目錄。在這裡我們依次添加以上的項,然後在Run中添加索引值,鍵名可以自己起,value要填軟體的實體路徑。實體路徑是客戶在部署確定的,我們如何擷取呢?這裡我們可以使用[TARGETDIR]擷取客戶選擇的路徑,在加上軟體的開機檔案名稱。比如軟體開機檔案的名稱是Client.exe,那麼Value的值就為:[TARGETDIR]Client.exe.產生安裝項目。找到bin目錄下的setup.exe檔案運行,安裝結束後我們可以在註冊表中找到相應的索引值。重啟電腦系統就會自動運行我們設定的軟體。
引自:http://www.cnblogs.com/whj518/archive/2009/10/28/1591026.html
方法二:
CSDN中使用VS製作安裝程式的介紹很多,我這裡主要是在開發winform是製作安裝程式後,如何修改.config設定檔,並修改註冊表HKEY_LOCAL_MACHINE、SOFTWARE\Microsoft\Windows\CurrentVersion\Run下的資訊,讓自己的程式開機自動運行。
解決以上兩個問題關鍵要作到以下幾點:
1、建立安裝項目後要在自己的解決方案是添加一個新的類庫項目(ClassLibrary1),並在新類庫中添加一下安裝程式類(Installer1),在Installer1類中添加如下代碼:
string LogicDir;//用於讀取安裝目標的實體路徑
protected override void OnAfterInstall(IDictionary savedState)
{
base.OnAfterInstall(savedState);
}
public override void Install(IDictionary stateSaver)
{
//string ll=Context.Parameters[]
LogicDir = Context.Parameters["LogicDir"];//Context.Parameters["LogicDir"];
base.Install(stateSaver);
}
protected override void OnBeforeInstall(IDictionary savedState)
{
base.OnBeforeInstall(savedState);
}
public override void Uninstall(IDictionary savedState)
{
base.Uninstall(savedState);
}
public override void Rollback(IDictionary savedState)
{
base.Rollback(savedState);
}
2、在庫類項目ClassLibrary1是添加一個window表單form1,用於完成自訂的安裝配置。
表單介面自己設計;
如添加三個TextBox
txtServerName伺服器名稱
txtSQLUserName SQL使用者名稱稱
txtSQLUserPassword SQL使用者口令
添加一個Button
給Form1添加欄位 string filePath;
重載Form1的建構函式
public Form1(string filepath)
{
filePath = filepath;
InitializeComponent();
}
Button1的單擊事件代碼如下:
private void btSave_Click(object sender, EventArgs e)
{
Configuration config = ConfigurationManager.OpenExeConfiguration(filePath + @"\MySchool.exe");
//配置MySchool.exe.config檔案。
if (config.ConnectionStrings.ConnectionStrings["MySchoolConnectionString"] != null)
{
config.ConnectionStrings.ConnectionStrings.Remove("MySchoolConnectionString");
//="Data Source=.;Initial Catalog=MySchool;User ID=sa;Password=123456"
string connString = "Data Source=" + this.txtServerName.Text.Trim();
connString += ";Initial Catalog=MySchool;User ID=" + this.txtSQLUserName.Text.Trim();
connString += ";Password=" + this.txtSQLUserPassword.Text.Trim();
ConnectionStringSettings conn = new ConnectionStringSettings("MySchoolConnectionString"
, connString, "System.Data.SqlClient");
config.ConnectionStrings.ConnectionStrings.Add(conn);
config.Save();
//此處開開始添加開機自動啟動並執行索引值,注意要using Microsoft.Win32;
RegistryKey hklm = Registry.LocalMachine;
RegistryKey shoftwer = hklm.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",true);
// RegistryKey ksxt = shoftwer.CreateSubKey("ksxt");
shoftwer.SetValue("ksxt", filePath + @"\MySchool.exe");
Application.Exit();
}
}
3.修改安裝程式類Installer1中的OnAfterInstall方法如下:
Form1 fm1 = new Form1(LogicDir);//執行個體化一個表單,
fm1.ShowDialog();//讓新表單顯示
base.OnAfterInstall(savedState);
4.修改安裝程式類Installer1中的Install方法如下
LogicDir = Context.Parameters["LogicDir"];//讀取安裝目標路徑
base.Install(stateSaver);
5.在安裝項目中“自訂動作”
右擊“安裝”添加自訂動作,自訂動作來源於安裝項目的“應用程式檔案夾”中的“主輸出來自ClassLibrary1(活動)”項。
6.修改“主輸出來自ClassLibrary1(活動)”的CustomActionData屬性為 /LogicDir="[TARGETDIR]\"
把Windows Installer 屬性的安裝目標屬性[TARGETDIR]賦值給LogicDir,這樣在Install方法中才能讀取到安裝路徑。
照以上步驟產生解決方案後,即可發布自己的程式。
用以上思路也可以實現卸載輸入合法口令卸載的功能。