标签:
winform打包c |
分类: 编程技术 |
郑重声明:以下内容完全源于网络,非本人自创。由于时间已久,无法找到原文出处。现将此文分享,仅为需要帮助的朋友提供方便,别无它意。如有转载,敬请声明。尊重原创!
1.要打包的程序的界面和后台代码截图。
http://s12/middle/9bd43e534cd14719fb23b&690
(图1)
http://s10/middle/9bd43e5307ae871c76b79&690
(图2)
-
功能代码解释。
-
最小化到托盘
-
如(图3)所示,必须先从工具栏中将NotifyIcon控件拖到winForm窗体(如:图1)中。然后如(图4)所示在NotifyIcon的click事件中写如(图5)所示代码。接着如(图6)所示在winform窗体的SizeChanged事件中写如(图5)所示代码。
http://s7/middle/9bd43e534cd1471ce8006&690(图3)
http://s8/middle/9bd43e534cd1471ecaf47&690
(图4)
http://s16/middle/9bd43e5307ae871cfa1af&690
(图5)
http://s6/middle/9bd43e534cd14724787b5&690
(图6)
附代码:
#region 最小化到托盘
private void Form1_Load(object sender, EventArgs e)
{
this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components);
notifyIcon1.Icon = new Icon("87.ico");//指定一个图标
notifyIcon1.Visible = false;
notifyIcon1.Click += new System.EventHandler(this.notifyIcon1_Click);
this.SizeChanged += new System.EventHandler(this.Form1_SizeChanged);
}
private void notifyIcon1_Click(object sender, EventArgs e)
{
if (WindowState == FormWindowState.Minimized)
{
notifyIcon1.Visible = false;
}
this.Activate();
ShowInTaskbar = true;
WindowState = FormWindowState.Normal;
}
private void Form1_SizeChanged(object sender, EventArgs e)
{
if (WindowState == FormWindowState.Minimized)
{
this.notifyIcon1.Visible = true;
ShowInTaskbar = false;
}
}
#endregion
-
开机自启动功能。
原理:将要启动的程序写入到配置服务的注册表中。注意:如(图8)所示,如果写的名称不对,则本功能就实现不了,因为要执行的程序不是这个程序。
http://s2/middle/9bd43e534cd147280f1a1&690
(图7)
http://s12/middle/9bd43e5307ae871dd95cb&690
(图8)
如下图代码所示:
public Form1()
{
InitializeComponent();
//判断注册表中是否有此值
bool exists = RegeditDirIsExist("OfficeFormOA.exe");
if (exists)
{
WriteRegName();//写入开机自启动注册表
}
timer1.Start();//检测登陆帐户
timer2.Start();//检测合同是否过期
}
#region 开机自动执行
/// <summary>
/// 判断启动项目录是否存在
/// </summary>
/// <param name="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 (string keys in subkey.GetSubKeyNames())
{
if (keys.ToLower() == dirName.ToLower())
{
return true;
}
}
return false;
}
/// <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)所示.
http://s8/middle/9bd43e534cd1472c24fb7&690
(图9)
-
开始打包
打开VS2008,选择【文件】à【新建】à【项目】,打开如(图10)所示界面。在界面中选择【其他项目类型】à【安装和部署】à【安装项目】,设置好"解决方案名称"和"存储位置"后(图11)点确定,打开如(图12)所示界面。
http://s11/middle/9bd43e5307ae871e7043a&690
(图10)
http://s7/middle/9bd43e534cd14732d3236&690
(图11)
http://s10/middle/9bd43e534cd14735979b9&690
(图12)
在(图12)中选择【应用程序文件夹】,右击该文件夹à【添加】à【文件夹】,新建一个【演示安装】文件夹。同理在【用户的"程序"菜单】下也添加一个【演示安装】文件夹。如(图13)所示。
http://s16/middle/9bd43e5307ae871f156ff&690
(图13)
单击(图13)中的【应用程序文件夹】下的【演示安装】文件夹,然后在右侧的红框里右击à【添加】à【文件】,打开【选择文件的界面】,然后找到要打包的项目所在的文件夹下的【发布(release)】文件夹,如(图14)所示。
http://s10/middle/9bd43e534cd1473878af9&690
(图14)
在(图14)中将要加载的内容全部选中,然后点击"打开按钮",出现如(图15)所示的界面。
http://s3/middle/9bd43e5307ae871f73432&690
(图15)
右击(图16)中所示的可执行程序,为其创建两个快捷方式(快捷方式改成自己喜欢的名称)。如(图17)所示。然后分别将这两个快捷方式剪切并粘贴到【用户的"程序"菜单】下的【演示安装】和【用户桌面 】下。
http://s7/middle/9bd43e534cd1473b5cb76&690
(图16)
http://s10/middle/9bd43e5307ae871fa62d9&690
(图17)
如(图18)所示。右击【应用程序文件夹】à【属性】,打开属性框。在属性框中找到"DefaultLocation"属性,将其值"[ProgramFilesFolder][Manufacturer]\[ProductName]"中的"[Manufacturer]"去掉,否则做好的安装程序默认安装目录会是"c:\programm file\你的用户名\安装解决方案名称"。
http://s1/middle/9bd43e534cd1473d56b20&690
(图18)
如(图19)所示,右击打包程序的解决方案名称,选择"属性"。打开如(图20)所示界面。点击"系统必备"按钮,弹出如(图21)所示界面,勾选".NET Framework 2.0(x86) "复选框。然后一直点确定按钮。好了,到现在为止,安装包功能已经完成了。
http://s9/middle/9bd43e534cd147401e8b8&690
(图19)
http://s6/middle/9bd43e534cd147421a125&690
(图20)
http://s11/middle/9bd43e534cd14745e320a&690
(图21)
现在添加卸载程序功能,在(图22)所示界面中的右边红色框中右击à【添加】à【文件夹】,弹出如(图23)所示"打开文件"的框。在框中选择"c:\windows\system32"文件夹下的"msiexec.exe"文件。结果如(图25)所示。
http://s13/middle/9bd43e534cd14747c6d6c&690
(图22)
http://s5/middle/9bd43e5307ae872112034&690
(图23)
http://s1/middle/9bd43e534cd1474e68770&690
(图24)
http://s12/middle/9bd43e5307ae8721b2b4b&690
(图25)
可以将"msiexec.exe"改名为"卸载演示安装.exe"(不改也可以),然后为其添加快捷方式(图26)。然后将该快捷方式剪切到【用户的"程序"菜单】文件夹下的【演示安装】文件夹下。
http://s9/middle/9bd43e534cd1475060b08&690
(图26)
单击"项目名称"按F4打开属性框(注意:不是右击出来的属性框)。找到"ProductCode"属性,将其值复制下来。
http://s12/middle/9bd43e534cd1475344e7b&690
(图27)
在(图28)所示的界面中右击刚刚添加的"卸载"快捷方式,打开属性界面,在属性框中找到"Arguments"属性,在后面的属性值框中输入"/x"然后将刚刚复制的值粘贴到里面,如(图29)所示。
http://s9/middle/9bd43e534cd1475424c18&690
(图28)
http://s2/middle/9bd43e5307ae872258cf1&690
(图29)
添加桌面快捷方式的图标
添加桌面快捷方式的图标。如(图30)所示,右击"演示安装"的快捷方式,打开属性对话框。在属性框中找到"Icon"属性。为其设置图片。在(图31)所示界面中双击"应用程序文件夹"。在(图32)中选择自己需要的图片,假如里面没有图片可以自己到(图22)中右边的红色框中右击à【添加】à【文件】,来添加自己需要的图片。
http://s8/middle/9bd43e534cd14758030b7&690
(图30)
http://s9/middle/9bd43e5307ae8722b2618&690
(图31)
http://s14/middle/9bd43e5307ae87230239d&690
(图32)
添加最小化后显示在任务栏中的图标(类似QQ的)
在【应用程序文件夹】à【演示程序】下再为可执行程序创建一个快捷方式,右击该快捷方式,打开属性框,在属性中找到"Icon"属性,同在桌面加快捷方式的图标一样设置图片。
http://s7/middle/9bd43e534cd1475ea5516&690
(图33)
-
生成安装包
如下图所示,将运行图标旁的模式调成"Relase",然后右击安装包项目的项目名称,点生成菜单。.NET环境左下方的任务提示生成成功即可。
http://s9/middle/9bd43e534cd1476081268&690
(图34)
-
找到安装包所在目录
右击解决方案名,选择"在windows资源管理器中打开文件夹(x)"(图35),打开"Release"文件夹即可看到打包好的安装包(图36)。
http://s9/middle/9bd43e5307ae87238fa98&690
(图35)
http://s13/middle/9bd43e534cd147655880c&690
(图36)
-
安装好的效果
桌面快捷方式
http://s1/middle/9bd43e534cd14770c1110&690
(图37)
最小化到任务栏
http://s6/middle/9bd43e5307ae872516835&690
(图38)