首页 > 代码库 > WPF安装部署小结

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;                     }    

 

WPF安装部署小结