这篇文章有38张截图,真心不想弄了,想看的到新浪博客去看吧:http://blog.sina.com.cn/s/blog_9bd43e530101d84n.html
郑重声明:以下内容完全源于网络,非本人自创。由于时间已久,无法找到原文出处。现将此文分享,仅为需要帮助的朋友提供方便,别无它意。如有转载,敬请尊重原创!
1.要打包的程序的界面和后台代码截图。
(图1)
(图2)
-
功能代码解释。
-
最小化到托盘
-
如(图3)所示,必须先从工具栏中将NotifyIcon控件拖到winForm窗体(如:图1)中。然后如(图4)所示在NotifyIcon的click事件中写如(图5)所示代码。接着如(图6)所示在winform窗体的SizeChanged事件中写如(图5)所示代码。
(图3)
(图4)
(图5)
(图6)
附代码:
#region 最小化到托盘
privatevoidForm1_Load(object sender,EventArgs e)
{
this.notifyIcon1 =new System.Windows.Forms.NotifyIcon(this.components);
notifyIcon1.Icon =newIcon("87.ico");//指定一个图标
notifyIcon1.Visible= false;
notifyIcon1.Click+= new System.EventHandler(this.notifyIcon1_Click);
this.SizeChanged +=new System.EventHandler(this.Form1_SizeChanged);
}
privatevoidnotifyIcon1_Click(object sender,EventArgs e)
{
if (WindowState ==FormWindowState.Minimized)
{
notifyIcon1.Visible= false;
}
this.Activate();
ShowInTaskbar =true;
WindowState =FormWindowState.Normal;
}
privatevoidForm1_SizeChanged(object sender,EventArgs e)
{
if (WindowState ==FormWindowState.Minimized)
{
this.notifyIcon1.Visible =true;
ShowInTaskbar =false;
}
}
#endregion
-
开机自启动功能。
原理:将要启动的程序写入到配置服务的注册表中。注意:如(图8)所示,如果写的名称不对,则本功能就实现不了,因为要执行的程序不是这个程序。
(图7)
(图8)
如下图代码所示:
public Form1()
{
InitializeComponent();
//判断注册表中是否有此值
bool exists = RegeditDirIsExist("OfficeFormOA.exe");
if (exists)
{
WriteRegName();//写入开机自启动注册表
}
timer1.Start();//检测登陆帐户
timer2.Start();//检测合同是否过期
}
#region 开机自动执行
/// <summary>
/// 判断启动项目录是否存在
/// </summary>
/// <paramname="dirName"></param>
/// <returns></returns>
bool RegeditDirIsExist(string dirName)
{
RegistryKey key;
RegistryKey subkey;
key = Registry.LocalMachine;
string fullDir ="software\\microsoft\\windows\\currentVersion\";
subkey =key.OpenSubKey(fullDir, true);
foreach (stringkeysinsubkey.GetSubKeyNames())
{
if (keys.ToLower() ==dirName.ToLower())
{
returntrue;
}
}
returnfalse;
}
/// <summary>
/// 写键值
/// </summary>
void WriteRegName()
{
string DirectoryName =Directory.GetCurrentDirectory();//获取当前目录
string regName ="OfficeFormOA.exe"; //加入启动项里的节点名
RegistryKey key;
RegistryKey subkey;
RegistryKey mainkey;
string fullDir ="software\\microsoft\\windows\\currentVersion\";
string dir ="run"; ///注册表目录
string filePath = DirectoryName +"\" + regName; //此处注意是系统程序(如:xp下的C:\windows\system32)的话,直接写文件名即可,否则要完整的路径
key = Registry.LocalMachine; //初始化subkey,操作HKEY_LOCAL_MACHINE\software\microsoft\windows\currentVersion\子项
subkey =key.OpenSubKey(fullDir, true);
//目录不存在则创建该目录
if (!RegeditDirIsExist(dir))
{
subkey.CreateSubKey(dir);
}
//以可写的方式打开目录
mainkey =key.OpenSubKey(fullDir + dir,true);
mainkey.SetValue(regName,filePath);
}
/// <summary>
/// 删除键值
/// </summary>
void DeleteRegName()
{
RegistryKey key;
RegistryKey subkey;
RegistryKey mainkey;
string fullDir ="software\\microsoft\\windows\\currentVersion\";
string dir ="run"; ///注册表目录
string regName ="WindowsFormsApplication1
key = Registry.LocalMachine; ///初始化subkey,操作HKEY_LOCAL_MACHINE\software\microsoft\windows\currentVersion\子项
subkey =key.OpenSubKey(fullDir, true);
mainkey =key.OpenSubKey(fullDir + dir,true);
try
{
mainkey.DeleteValue(regName);
}
catch
{
}
}
#endregion
-
本地程序生成
右击解决方案生成即可。注意:本地程序在生成的时候要使用发布版的,如(图9)所示.
(图9)
-
开始打包
打开VS2008,选择【文件】à【新建】à【项目】,打开如(图10)所示界面。在界面中选择【其他项目类型】à【安装和部署】à【安装项目】,设置好"解决方案名称"和"存储位置"后(图11)点确定,打开如(图12)所示界面。
(图10)
(图11)
(图12)
在(图12)中选择【应用程序文件夹】,右击该文件夹à【添加】à【文件夹】,新建一个【演示安装】文件夹。同理在【用户的"程序"菜单】下也添加一个【演示安装】文件夹。如(图13)所示。
(图13)
单击(图13)中的【应用程序文件夹】下的【演示安装】文件夹,然后在右侧的红框里右击à【添加】à【文件】,打开【选择文件的界面】,然后找到要打包的项目所在的文件夹下的【发布(release)】文件夹,如(图14)所示。
(图14)
在(图14)中将要加载的内容全部选中,然后点击"打开按钮",出现如(图15)所示的界面。
(图15)
右击(图16)中所示的可执行程序,为其创建两个快捷方式(快捷方式改成自己喜欢的名称)。如(图17)所示。然后分别将这两个快捷方式剪切并粘贴到【用户的"程序"菜单】下的【演示安装】和【用户桌面】下。
(图16)
(图17)
如(图18)所示。右击【应用程序文件夹】à【属性】,打开属性框。在属性框中找到"DefaultLocation"属性,将其值"[ProgramFilesFolder][Manufacturer]\[ProductName]"中的"[Manufacturer]"去掉,否则做好的安装程序默认安装目录会是"c:\programmfile\你的用户名\安装解决方案名称"。
(图18)
如(图19)所示,右击打包程序的解决方案名称,选择"属性"。打开如(图20)所示界面。点击"系统必备"按钮,弹出如(图21)所示界面,勾选".NETFramework 2.0(x86) "复选框。然后一直点确定按钮。好了,到现在为止,安装包功能已经完成了。
(图19)
(图20)
(图21)
现在添加卸载程序功能,在(图22)所示界面中的右边红色框中右击à【添加】à【文件夹】,弹出如(图23)所示"打开文件"的框。在框中选择"c:\windows\system32"文件夹下的"msiexec.exe"文件。结果如(图25)所示。
(图22)
(图23)
(图24)
(图25)
可以将"msiexec.exe"改名为"卸载演示安装.exe"(不改也可以),然后为其添加快捷方式(图26)。然后将该快捷方式剪切到【用户的"程序"菜单】文件夹下的【演示安装】文件夹下。
(图26)
单击"项目名称"按F4打开属性框(注意:不是右击出来的属性框)。找到"ProductCode"属性,将其值复制下来。
(图27)
在(图28)所示的界面中右击刚刚添加的"卸载"快捷方式,打开属性界面,在属性框中找到"Arguments"属性,在后面的属性值框中输入"/x"然后将刚刚复制的值粘贴到里面,如(图29)所示。
(图28)
(图29)
添加桌面快捷方式的图标
添加桌面快捷方式的图标。如(图30)所示,右击"演示安装"的快捷方式,打开属性对话框。在属性框中找到"Icon"属性。为其设置图片。在(图31)所示界面中双击"应用程序文件夹"。在(图32)中选择自己需要的图片,假如里面没有图片可以自己到(图22)中右边的红色框中右击à【添加】à【文件】,来添加自己需要的图片。
(图30)
(图31)
(图32)
添加最小化后显示在任务栏中的图标(类似QQ的)
在【应用程序文件夹】à【演示程序】下再为可执行程序创建一个快捷方式,右击该快捷方式,打开属性框,在属性中找到"Icon"属性,同在桌面加快捷方式的图标一样设置图片。
(图33)
-
生成安装包
如下图所示,将运行图标旁的模式调成"Relase",然后右击安装包项目的项目名称,点生成菜单。.NET环境左下方的任务提示生成成功即可。
(图34)
-
找到安装包所在目录
右击解决方案名,选择"在windows资源管理器中打开文件夹(x)"(图35),打开"Release"文件夹即可看到打包好的安装包(图36)。
(图35)
(图36)
-
安装好的效果
桌面快捷方式
(图37)
最小化到任务栏
(图38)