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() > )
{
this.Properties["ArbitraryArgName"] = e.Args[];
}
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安装部署小结的更多相关文章
- Wix 安装部署教程(十) --来,用WPF做个漂亮的安装界面
在上一篇中曾留下两个问题,.Net捆绑安装不触发以及路径选择的问题现在都已经解决,这段时间花的最多的地方还是WPF调样式上面,奈何WPF功力不够,暂时还是没有达到自己想要的效果.另外ViewModel ...
- windows系统dokuwiki安装部署设置 xampp环境配置
简单记录一次安装dokuwiki的过程 dokuwiki下载 dokuwiki下载地址 https://download.dokuwiki.org/ 下载前有一些可选项目,版本.语言.插件,可以按照需 ...
- HHvm建站环境搭建方法:Nginx,Mariadb,hhvm及lnmp/lamp安装部署
HHVM起源于Facebook公司,是一个开源的PHP虚拟机,使用JIT的编译方式以及其他技术,让PHP代码的执行性能大幅提升.HHVM提升PHP性能的途径,采用的方式就是替代Zend引擎来生成和执行 ...
- ArcGIS Enterprise 10.5.1 静默安装部署记录(Centos 7.2 minimal)- 6、总结
安装小结 安装完成后,首先我们需要将Datastore托管给Server,再将Server托管给Portal以此来完成整个单机版Enterprise 部署流程.为了测试流程是否正确,我们可以采用上传一 ...
- Redis for OPS 01:关于 Redis 基础说明与安装部署
写在前面的话 本章节开始在主要介绍在运维工作中绕不开的一个话题,数据缓存 NoSQL 服务 Redis,搭建很简单,使用很简单,运行也稳定的一批,一般小公司几乎很少出现以为量的问题导致他 down 掉 ...
- 2-MySQL DBA笔记-MySQL安装部署和入门
第2章 MySQL安装部署和入门 第1章介绍了MySQL的一些基础知识,本章将为读者介绍MySQL的部署.安装及一些常用命令和参数的设置.2.1 如何选择MySQL版本 在选择MySQL的版本时,要根 ...
- centos7安装部署opentsdb2.4.0
写在前面 安装HBase 在HBase中创建表结构 安装配置并启动opentsdb 写在前面 最近因为项目需要在读opentsdb的一部分源码,后面会做个小结分享出来.本人是不大喜欢写这种安装部署的文 ...
- 4. 利用MySQL Shell安装部署MGR集群 | 深入浅出MGR
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 目录 1. 安装准备 2. 利用MySQL Shell构建MGR集群 3. MySQL Shell接管现存的MGR集群 4 ...
- Oracle安装部署,版本升级,应用补丁快速参考
一.Oracle安装部署 1.1 单机环境 1.2 Oracle RAC环境 1.3 Oracle DataGuard环境 1.4 主机双机 1.5 客户端部署 二.Oracle版本升级 2.1 单机 ...
随机推荐
- JS window对象的top、parent、opener含义
.top 该变更永远指分割窗口最高层次的浏览器窗口.如果计划从分割窗口的最高层次开始执行命令,就可以用top变量. .opener opener用于在window.open的页面引用执行该window ...
- Java抽象类深入理解-----模板方法设计模式(Templete Method)
模板方法设计模式(Templete Method) 定义一个操作中的算法骨架,而将一些可变部分的实现延迟到子类中. 模板方法设计模式使得子类可以不改变一个算法的结构即可重新定义该算法某些特定的步骤. ...
- linux find详解
find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件. find的使用格式如下: $ find <指定目录> <指定条件> <指定动作> - < ...
- Web UI 网站用户界面设计命名规范
Web UI 网站用户界面设计命名规范 WEB UI设计命名规范,也就是网站用户界面设计(网页设计)命名规范. 这套规范并非单纯的CSS.html或JavaScript命名规范,它涉及了很多使用Pho ...
- 【LeetCode练习题】Recover Binary Search Tree
Recover Binary Search Tree Two elements of a binary search tree (BST) are swapped by mistake. Recove ...
- IO队列和IO调度
IO体系概览 先看看本文主题IO调度和IO队列处于整个IO体系的哪个位置,这个IO体系是非常重要的,了解IO体系我们可以对整个IO过程有个全面的认识.虽然一下两下并不清楚IO体系各个部分的细节,但是我 ...
- 【转】Windows与Linux(Ubuntu)双系统时间不一致的解决方法
当在嵌入式Linux里面备份文件时候,在备份的时候,PC(win7)和开发板的时间都是9:30,但是在开发板发现文件创建时间是9:30,然后u盘插在PC(win7)上,发现文件创建时间是1:30,为什 ...
- python标准库 sysconfig模块
# -*- coding: utf-8 -*-# python:2.x__author__ = 'Administrator'import sysconfig#sysconfig:解释器编译时配置#作 ...
- [工作问题总结]MyEclipse 打开项目
------------------------------ASP.Net+Android+IO开发 .Net培训 期待与您交流!------------------------------ 1.项目 ...
- mysql 自己定义存储过程和触发器
mysql 自己定义存储过程和触发器 --存储过程示范 DROP PROCEDURE IF EXISTS PRO_TEST; CREATE PROCEDURE PRO_TEST(IN NUM_IN I ...