開機啟動
右擊"MySetup">>"視圖">>"注冊表",在"HKEY_LOCAL-MACHINE"文件夾下新建鍵"Software">>"Microsoft">>"Windows">>"CurrentVersion">>"Run",在"Run"文件夾新建字符串值,命名為"DataServiceHost.exe",可根據需求命名,右擊"DataServiceHost">>"屬性窗口",其中"Value"屬性設為"[TARGETDIR] DataServiceHost.exe"。如此,便實現了開機啟動。
實現安裝后自動運行及刪除注冊表
點擊菜單上的"文件">>"添加">>"新項目",選擇"安裝程序類",命名為"Installer",在"Installer.cs"代碼中重寫如下方法。自定義操作完成后,一定要將應用程序生成,這樣就可以得到".dll"文件。生成成功后,就可以將該".dll"程序集添加到安裝項目中。右擊"MySetup">>"視圖">>"自定義操作",主窗口如下圖。
右擊"安裝">>"添加自定義操作",彈出如下對話框。
在"應用程序文件夾"中添加程序集,在之前"InstallService應用程序"中debug文件夾中找到".dll"文件,添加進去。這樣便實現了安裝后自動運行和卸載后刪除注冊表的功能。
安裝完成后自動運行某個程序
將這句代碼寫在AfterInstall里面:
System.Diagnostics.ProcessStartInfo psiConfig = new System.Diagnostics.ProcessStartInfo(path + "\\run.exe");//path即是安裝的目錄
System.Diagnostics.Process pConfig = System.Diagnostics.Process.Start(psiConfig);
如何得到用戶所選安裝路徑?在實現代碼的時候,用戶所選安裝路徑大多數情況下都要用到,怎么得到他的值呢?在自定義操作->安裝->"主輸出來自Library(活動)"上面右鍵屬性,在CustomActionData中填入/targetdir="[TARGETDIR]\", 然后在類InstallerTest中用這句話this.Context.Parameters["targetdir"] 就可以取得安裝的目錄了
C#避免重復打開應用程序
在程序啟動時判斷進程是否在運行,如果運行則關閉。
public MainWindow() { InitializeComponent(); //默認設置 //關掉已運行的進程實例 Process ps = GetRunningInstance(); if (ps != null) ps.Kill(); } //獲取已運行的進程實例 public static Process GetRunningInstance() { Process currentProcess = Process.GetCurrentProcess(); //獲取當前進程 //獲取當前運行程序完全限定名 string currentFileName = currentProcess.MainModule.FileName; //獲取進程名為ProcessName的Process數組。 Process[] processes = Process.GetProcessesByName(currentProcess.ProcessName); //遍歷有相同進程名稱正在運行的進程 foreach (Process process in processes) { if (process.MainModule.FileName == currentFileName) { if (process.Id != currentProcess.Id) //根據進程ID排除當前進程 return process;//返回已運行的進程實例 } } return null; }
WPF 接收進程參數方法
首先重寫app.xml方法OnStartup,在方法中接收參數,並保存到屬性中。在主窗體就可以應用了。
/// <summary> /// App.xaml 的交互邏輯 /// </summary> public partial class App : Application { //重寫app方法 protected override void OnStartup(StartupEventArgs e) { if (e.Args != null && e.Args.Count() > 0) { this.Properties["ArbitraryArgName"] = e.Args[0]; } base.OnStartup(e); } }
在應用的時候
if (Application.Current.Properties["ArbitraryArgName"] != null)
{
_UserName = Application.Current.Properties["ArbitraryArgName"].ToString();//ArbitraryArgName要與APP里面設置的名字相同
_UserName = _UserName.Split('/')[2];
lbUserName.Text = "當前用戶:" + _UserName;
}
