WPF安裝部署小結


開機啟動

右擊"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;           
          }    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM