前言:我目前在写的一个上位机演示程序,有一个功能还没完全实现好,然后又找到了可以使用的替代程序,所以就需要先调用这个外部程序,等到我们自己的实现好了再换上去。为了方便用户的操作我想过两个方案:一个是安装外部程序之后,通过访问注册表获取程序安装路径,然后再调用。二是将程序安装后的可执行文件和依赖的包一并拷贝到我们的程序的bin/debug文件夹下,就可以直接调用了。优缺点我在文章末尾给出,下面我将给出两种方案的实现方法~
嘎嘎嘎提纲:c#如何注册表获取程序安装路径以及通过c#的Process类调用外部程序。
一、实验效果
由于注册表访问的方式只能运行注册表项中列出来的可执行程序,但并不是所有安装的程序都有在注册表中列出来,因此测试时得要先知道哪些程序在注册表中可以访问到~首先就给大家介绍一下打开注册表的方法:按下win+“r”键->输入“regedit”->点击"确定",即可查看注册表。
访问注册表注册表中记录程序安装路径信息的位置是:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
注册表访问(1)获取程序路径
通过Visual studio启动或者在工程文件夹的bin/debug文件夹下找到.exe文件运行改程序,即可得到如下界面。
在程序名处,输入注册表中有的程序名,若不知道哪些程序在注册表中登记过,就参照上面给出的方法查看一下吧。本人安装了谷歌浏览器,我们便以chrome为例:在程序名称处输入“chrome”->点击“获取路径”->成功查询到时,下面便会显示查到的程序安装路径。
程序功能展示1(2)调用程序方式一
成功通过注册表查询,获取到路径之后,单击“调用程序”按钮,即可打开外部程序啦~
程序功能展示2(3)调用程序方式二
单击“打开FlashPrint”,即可调用FlashPrint程序。这个FlashPrint程序的可执行文件等,被我事先放置到工程的bin/Debug文件夹下,该按钮的功能就是简单的调用。改写时,就是将要调用的可执行程序一并拷贝到本工程文件夹下,然后更改为自己要调用的程序的路径即可。
程序功能展示3二、实现方法
先使用拖控件,简单修改控件属性(主要是更改外观,外观不影响功能,不重要),搭出界面:
界面搭建1.方案一
(1)通过注册表获取路径
双击获取路径添加按钮响应函数的代码:
通过注册表获取路径的代码需要注意的是我们安装的程序路径信息主要在注册表中的如下位置:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths。
本段函数的功能就是:检索HKEY_LOCAL_MACHINE下的SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\+“程序名称.exe”项,获取程序路径。若成功获取到,则将程序路径显示出来;若检索失败,则给出用户提示信息(通过显示路径的那个label和界面最下方的textbox显示用户提示信息)。
(2)通过获取到的路径调用程序
先在窗体类下面添加之后需要使用的process实例对象。
声明Process对象PS:这里有一个关于Process(进程)、thread(线程)、以及两者差别的知识点,有兴趣可以自行学习一下~
双击“调用程序”添加按钮响应函数代码:
通过获取到的路径调用程序的代码这一段函数的功能就是创建一个进程,设置进程启动路径为我们查询到的注册表中的位置,并开启进程,若出现异常则给出提示信息。
2.方案二
方案二:安装程序之后找到安装路径,再将整个程序文件夹拷贝到工程位置(此处我们拷贝到了bin/debug文件夹下),然后再使用相对路径进行调用。
这么做的原因是:我们当时需要调用3个外部程序,但是其中有1个没有办法在注册表中成功找到,无法通过方案一查询到之后再调用。使用这个方法之后我们还发现一个好处,就是用户不再需要自己安装另外外部程序了。
(1)复制外部程序文件夹到本工程
用户的确不需要安装外部程序啦,但是我们还是要先装一下,然后找到程序文件夹。以FlashPrint为例进行试验。软件下载地址:链接:https://pan.baidu.com/s/1q0OGW-XSHP7fVUFaIHM1PQ提取码:bs8t。
下载得到的安装文件我的电脑是64位的,直接双击下面一个,选择语言、点击我接受协议然后一路“下一步”到安装结束即可。注意:需要记录一下程序安装位置,待会儿要去该位置下把程序文件夹拷贝过来。
程序安装位置此处我是将FlashForge文件夹直接拷贝到本工程文件夹的bin/Debug文件夹下
拷贝安装得到的文件夹到工程文件下(2)添加按钮响应函数
双击“打开FlashPrint”添加按钮响应功能函数:
打开FlashPrint”按钮响应功能函数该函数的功能是当未创建进程时创建进程并启动,若进程已经创建过则运行进程。
三、优缺点分析
关于优缺点上文也提到了一些,下面我们更具体第说明一下:
方案一的优点:
(1)编写程序是比较方便,不需要做程序文件夹拷贝等工作,直接安装查询注册表即可。
(2)不会导致我们自己的程序文件特别大
方案二的优点:
(1)无法从注册表中查询到程序路径时,本程序依然能够工作
(2)用户不需要考虑安装外部程序的过程,可以直接使用
本文程序的下载链接待会儿在评论中给出(突然想起来01-DOC下的readme还没写(`・ω・´))~
网友评论
链接:https://pan.baidu.com/s/1hoeeIIh1jDH_NHxeTX65uQ
提取码:n2d5