在.Net如何制作自定义的快捷方式(转)

我们用.Net安装程序生成的快捷方式是这样的,如下图:



  该图中目标所对应的文本框是灰色的,并且下方的查找目标和更改图标两个按钮也是不可用。这样我们根本就没有办法更改这个快捷方式。

假如这时有个客户需要在程序启动的时候传入一些参数,那样我们根本就没有办法,因为快捷方式不可编辑,我们总不能让客户在CMD窗口启动吧~~这样我们就不能使用.Net提供的快捷方式。只能是自己建立快捷方式。

那我们怎么建立快捷方式呢,这里我们需要用到一个Com组件:Windows Script Host Object Model

这个组件,就是帮助我们建立快捷方式的。

首先:我们先在启动项目中添加上引用,如下图



然后,我们再在启动项目中添加一个安装程序类,这个类的主要作用就是在程序进行安装和卸载的时候添加或者删除快捷方式。代码如下:

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using IWshRuntimeLibrary;
using System.IO;

namespace New
{
    [RunInstaller(
true)]
    
public partial class MyInstaller : Installer
    
{
        
public MyInstaller()
        
{
            InitializeComponent();
        }


        
public override void Install(System.Collections.IDictionary stateSaver)
        
{
            
try
            
{
                
base.Install(stateSaver);

                System.Reflection.Assembly Asm 
= System.Reflection.Assembly.GetExecutingAssembly();//获取当前程序集信息
                System.IO.FileInfo fileinfo = new System.IO.FileInfo(Asm.Location);//获取当前程序集位置
                string dbpath = fileinfo.DirectoryName;//获取文件夹名称
                string name = fileinfo.Name;//获取文件名称
                
//去掉后缀
                if (name.ToUpper().Contains(".EXE"))
                
{
                    name 
= name.ToUpper().Replace(".EXE""");
                }

                
//在桌面创建快捷方式
                WshShell shell = new WshShell();
                IWshShortcut shortcut 
= (IWshShortcut)shell.CreateShortcut(
                    Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) 
 "\\"   name   ".lnk"
                    );

                shortcut.TargetPath 
= Asm.Location;//目标
                shortcut.WorkingDirectory = dbpath;//工作文件夹
                shortcut.WindowStyle = 1;//窗体的样式:1为默认,2为最大化,3为最小化
                shortcut.Description = "yangyang8848";//快捷方式的描述
                shortcut.IconLocation = Asm.Location;//图标
                shortcut.Save();

                
//在程序菜单中创建文件夹
                if (!Directory.Exists(Environment.GetFolderPath(Environment.SpecialFolder.Programs)   "\\yangyang8848\\"   name))
                
{
                    Directory.CreateDirectory(Environment.GetFolderPath(Environment.SpecialFolder.Programs) 
 "\\yangyang8848\\"   name);
                }

                
//在程序菜单中创建快捷方式
                IWshShortcut shortcut2 = (IWshShortcut)shell.CreateShortcut(
                    Environment.GetFolderPath(Environment.SpecialFolder.Programs) 
 "\\yangyang8848\\"   name   "\\"   name   ".lnk"
                    );

                shortcut2.TargetPath 
= Asm.Location;
                shortcut2.WorkingDirectory 
= dbpath;
                shortcut2.WindowStyle 
= 1;
                shortcut2.Description 
= "yangyang8848"   "-"   name;
                shortcut2.IconLocation 
= Asm.Location;
                shortcut2.Save();


            }

            
catch (Exception e)
            
{
                System.Windows.Forms.MessageBox.Show(e.Message);
            }


        }


        
public override void Uninstall(System.Collections.IDictionary savedState)
        
{
            
base.Uninstall(savedState);
            
//卸载程序的时候将两个快捷方式删除
            System.Reflection.Assembly Asm = System.Reflection.Assembly.GetExecutingAssembly();
            System.IO.FileInfo fileinfo 
= new System.IO.FileInfo(Asm.Location);
            
string name = fileinfo.Name;

            
if (name.ToUpper().Contains(".EXE"))
            
{
                name 
= name.ToUpper().Replace(".EXE""");
            }


            
if (Directory.Exists(Environment.GetFolderPath(Environment.SpecialFolder.Programs)   "\\yangyang8848\\"   name))
            
{
                
if (Directory.GetDirectories(Environment.GetFolderPath(Environment.SpecialFolder.Programs)   "\\yangyang8848\\").Length > 1)
                
{
                    Directory.Delete(Environment.GetFolderPath(Environment.SpecialFolder.Programs) 
 "\\yangyang8848\\"   name  "\\"true);
                }

                
else
                
{
                    Directory.Delete(Environment.GetFolderPath(Environment.SpecialFolder.Programs) 
 "\\yangyang8848\\"true);
                }

            }

            
if (System.IO.File.Exists(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)   "\\"   name   ".lnk"))
            
{

                System.IO.File.Delete(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) 
 "\\"   name   ".lnk");
                
            }

        }

    }

}


利用上边的代码创建出来的快捷方式样式如下:


我们可以看到,这个快捷方式目标处的文本框是可以编辑的,并且按钮查找目标和更改图标也是可以编辑的。这样我们就可以在启动程序的时候通过快捷方式输出参数,满足用户的需求。

转载于:https://www.cnblogs.com/yuanermen/archive/2007/10/07/916447.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263019.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据——Kafka学习笔记

具体代码可以参考: https://github.com/Ostrich5yw/java4BigData/tree/master/java4Kafka

ITOO高校云平台V3.1--项目总结(一)

高校云平台,可以说是我参加的的一个实战性的项目,刚开始接触,可以说是有点蒙,到真正的用到实践中去的时候才发现,之前学到的好多的知识,还只是依然处于学过的层次上,想要真正的运用到项目中去&a…

TABCTL32.OCX 文件

引用:http://zhidao.baidu.com/question/287980070.html 从网上下载TABCTL32.OCX解压缩后拷贝此文件到c:\windows\system32 点开始 运行 输入 regsvr32 TABCTL32.OCX 显示成功后就可以了。 地址: http://ishare.iask.sina.com.cn/f/7602536.html?fromli…

ASP.Net中控件的EnableViewState属性

在ASP.Net中对各个WebForm控件引入以前没有的EnableViewState属性。这个属性究竟有什么用。我们知道对于WebForm而言,其代码是在服务器端的,以处理客户端的请求。当用户通过浏览器浏览网页的时候,会对网页进行某些操作,比如打开新…

大数据——SparkCore学习笔记

Spark 一、Spark简介 Spark 是一种由 Scala 语言开发的快速、通用、可扩展的大数据分析引擎Spark Core 中提供了 Spark 最基础与最核心的功能Spark SQL 是 Spark 用来操作结构化数据的组件。通过 Spark SQL,用户可以使用 SQL 或者 Apache Hive 版本的 SQL 方言&am…

如何用Mybatis分库分表

分库 在分库的时候 有时候为了方便 一些表需要存放所有库的信息,称为全局库。如:用户表存放所有的用户。 此时分库的思路 数据库分为全局库和业务库,其中业务库又分为N多个库,全局库只放个别表方便开发。 这个时候 就需要一个全局…

Kubernetes权威指南精彩段落

2019独角兽企业重金招聘Python工程师标准>>> 看到上述两段代码,你可能会有一种“开门复动竹, 疑是故人来”的感觉。的确,这段代码经笔者反复考证后认定:100%高仿kubernetes Controller Server中的代码。连传说中的谷歌大神也能cop…

常用文献管理软件使用经验

常用的文献管理软件有:Endnote、Biblioscape和Reference Manager。由于不知道哪个好用,我把三个都装上进行了对比。 一、首先是在Word中引用文献功能的比较。 Endnote是最方便的,工具条上的按键就可以把文献插入到Word中。Biblioscape也能与W…

IMP出现的ORA-01401错误可能和字符集有关(转载)

今天在论坛上,看到有一位朋友问 “我备份数据库后在其他的机器上再导入这个数据库,出现如下错误,并只能导 入部分数据。 IMP-00019: row rejected due to ORACLE error 1401 IMP-00003: ORACLE error 1401 encountered ORA-01401: inserted v…

QT中的pro文件

动态库pro设置VERSION 1.0.1901.0时,产生目标名字总会带数字1解决方法:CONFIG skip_target_version_ext设置输出路径 DESTDIR ./output静态链接 LIBS -L$$PWD/../../lib -lopencv_world320转载于:https://www.cnblogs.com/huanyinglvtuan/p/11280013…

大数据——SparkSQL学习笔记

Spark 一、SparkSQL简介 ​ Spark用来处理结构化数据的一个模块,它提供了两个编程抽象分别叫做DataFrame和DataSet,它们用于作为分布式SQL查询引擎(类似于Hive,为便于进行MapReduce操作而使用类SQL语句进行Spark操作&#xff09…

windows phone7资料整理

wp7资料库 http://msdn.microsoft.com/zh-cn/magazine/gg598932.aspx 开发指导视频: http://channel9.msdn.com/Series/Windows-Phone-7-Development-for-Absolute-Beginners 指导博客: http://www.jeffblankenburg.com/2010/09/30/31-days-of-windows-p…

远程连接 SuSE Linux 设置方法

作者:Flyingis 且不说远程连接的便利性,就是机房里那轰轰的高分贝就足以让你的耳膜形成习惯性振动,何况还需要集中精神工作呢,在网络带宽允许的情况下,还是选择远程吧。远程连接的客户端工具有很多,有商…

android获取控件宽度高度

前几天&#xff0c;在自定义控件的时候碰到个问题&#xff0c;就是在如何获取自定义控件的高宽。在自定义控件类的构造函数中&#xff0c;本来以为可以轻松获取&#xff0c;但事实不是这样。我测试了下面代码&#xff1a; 先是布局代码&#xff1a; <com.lml.getvalues.MyVi…

浅谈Java网络编程之Socket (1)

和大家一起分享的是Java网络编程之Socket。在Java中Socket可以理解为客户端或者服务器端的一个特殊的对象&#xff0c;这个对象有两个关键的方法&#xff0c;一个是getInputStream方法&#xff0c;另一个是getOutputStream方法。getInputStream方法可以得到一个输入流&#xff…

Windows10系统Python2.7通过Swig调用C++过程

我用的 python版本是2.7.12&#xff1a; Python 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:24:40) [MSC v.1500 64 bit (AMD64)] on win32 1, 下载Swig 下载地址&#xff1a;http://www.swig.org/download.html&#xff0c;我下载了最新版本swigwin-4.0.0. 下载后直接解压…

《当程序员的那些狗日日子》(六十一)美丽的天际

《当程序员的那些狗日日子》&#xff08;六十一&#xff09;美丽的天际 注&#xff1a;这一篇之后&#xff0c;全文完结&#xff0c;后面还会再写一篇《后记》&#xff0c;以记录我在写作中的一些心情和感受&#xff0c;以及我想对各位支持和关注的朋友说的话。 我交了订金订购…

ewebeditor遍历路径漏洞

ewebeditor/admin_uploadfile.asp?id14在id14后面添加&dir..再加 &dir../..&dirhttp://www.cnblogs.com/../.. 看到整个网站文件了 转载于:https://www.cnblogs.com/allyesno/archive/2007/11/04/949171.html

Windows系统Python直接调用C++ DLL

环境&#xff1a;Window 10&#xff0c;VS 2019&#xff0c; Python 2.7.12, 64bit 1&#xff0c;打开 VS 2019&#xff0c;新建C Windows 动态链接库工程 Example&#xff0c;加入下列文件&#xff0c;如果Python是64位的则在VS中 Solution platforms 选择 x64 编译成64位的 D…

用SD卡下载uboot、linux内核和文件系统

1、 移植mtd-utils: a) 下载utd-utils 下载地址为ftp://ftp.infradead.org/pub/mtd-utils/b) 交叉编译mtd-utilsi 修改Makefile CROSSarm-linux-ii makeiii 查看下mtd-utils-1.0.0目录下是否生成了咱们所需要大工具 (flashcp,nandwrite......等)。有工具生成了&#xf…