在.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

大数据——SparkCore学习笔记

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

Kubernetes权威指南精彩段落

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

大数据——SparkSQL学习笔记

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

用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…

css3中变形与动画(三)

transform可以实现矩阵变换,transition实现属性的平滑过渡,animation意思是动画,动漫,这个属性才和真正意义的一帧一帧的动画相关。本文就介绍animation属性。 animation属性通过一些关键帧中元素属性的改变来实现动画效果。当然也…

Scott Mitchell 的ASP.NET 2.0数据教程之四十四::DataList和Repeater数据分页

原文 | 下载本教程中的编码例子 | 下载本教程的PDF版 导言 分页和排序是显示数据时经常用到的功能。比如,在一个在线书店里搜索关于ASP.NET 的书的时候,可能结果会是成百上千,而每页只列出十条。而且结果可以根据title(书名&#…

通过ClassLoader调用外部jar包

通过ClassLoader调用外部jar包 我们大家都知道,每个运行中的线程都有一个成员contextClassLoader,用来在运行时动态地载入其它类。 系统默认的contextClassLoader是systemClassLoader,所以一般而言java程序在执行时可以使用JVM自带的类、$JAV…

Git回滚操作的总结

git结构和各操作之间的关系 1,撤销add操作: git reset 2,撤销commit操作: git reset –soft 保留源码,只回退commit信息到某个版本,不涉及index的回退,如果还需要提交,直接commit即…

Blender建模与游戏换装(转载文)

本文转载自https://my.oschina.net/huliqing/blog/880113?hmsrtoutiao.io 如果本文涉及侵权行为,请原作者联系博主邮箱,我将及时进行删除处理 博主邮箱:yibiandaoaliyun.com 前言 本文将详细讲解3D游戏中换装的原理及换装中的一些重点问题&a…

出路在哪里?出路在于思路!智者无敌

有人工作,有人继续上学,大家千万不要错过这篇文章,能看到这篇文章也是一种幸运,真的受益匪浅,对我有很大启迪,这篇文章将会改变我的一生,真的太好了,希望与有缘人分享,也…

xml02 XML编程(CRUD)增删查改

XML解析技术概述 Demo2.java import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; public class Demo2 { public static void main(String args[])throws Exception { //1.创建工程 DocumentBuilderFac…

ASP.NET Web Game 架构设计1--服务器基本结构

ASP.NET Web Game 架构设计1--服务器基本结构 1. 基本结构图 2. 系统组成与角色 整个系统大体上分为三个部分:1.网页客户端。2.IIS Web服务器。3.数据库及逻辑服务器。其中Web服务器不处理任何逻辑,它的作用只有两点:1.承载用户。…

人人网 Windows Phone 7 应用开发起步

目前,人人网在国内高校学生中的普及率非常高。前段时间,大概是11月下旬的样子,人人网发布了Windows Phone 7客户端的公测版。我想,Windows Phone 7本地化的优劣,直接关系到其将来在国内的市场份额。而诸如人人等针对学…

XP Sp2下双机通过无线网卡实现Internet共享

两台均有无线网卡、装有XP SP2系统的计算机如何实现共享Internet上网呢,请参考一下步骤: 1、打开两台计算机的无线网络连接属性,并切换至“无线网络配置”页签。2、点中右下角的高级按钮设置,选中最下面的“仅计算机到计算机” 和…

C#面向对象设计模式第九讲:Composite 组合模式(结构型模式)

(根据MSDN Webcast相关课程整理) 由俄罗斯套娃讲起。娃娃里又包含另一个娃娃,最后那个不包含任何娃娃。 组合模式,采用树型结构来实现普遍存在的对象容器,将本原一对多的复杂的关系,转换成一对一的简单关系…

Docker for Windows

安装条件:必须是 Win10 Pro 或者 Enterprise version. 转载于:https://www.cnblogs.com/qijiage/p/9261258.html

《火影忍者:究级风暴》渲染技术究极解析!

http://www.opengpu.org/forum.php?modviewthread&tid6609 与Takara Tomy公司的《火影忍者》系列游戏不同,初次登陆PS3平台的本作是由日本CyberConnect2制作的对战格斗游戏《火影忍者:终极英雄》系列的最新作。虽然游戏的开发商仍然是CyberConnect2…

工程中新增Properties

如一开始工程中是没有Properties文件夹的! 但工程目录文件夹下却有一个Properties: 现在要向这个Properties文件夹中添资源文件。操作步骤: [添加新项]->[资源文件] 再将Resource.resx文件拉到Properties DONE!!!

Django:序列化的几种方法

前言 关于序列化操作,就是将一个可迭代的数据结构,通过便利的方式进行我们所需要的操作。 今天历来归纳一下,Django中的几种不同得分方法,已经Django-restframework提供的方法 创建一个Django的项目 再新建一个app 创建一个模型&a…