C# winform程序打包安装(图解)
如果不加载数据库和其它一些系统组件可以按照C#从入门到精通的步骤进行,如果需要给快捷方式和安装文件添加图标。图片格式必须为ICO格式,如果不正确的ICO格式也会添加不上。
JPG等图片格式转换为ICO格式的方法:
可以先用系统自带的画图工具打开图片,然后另存为PNG,然后利用PNG转ICO软件将PNG图片转换为ICO格式
第一步:
打开VS2010,打开你要打包的项目,然后右击"解决方案",”添加“,"新建项目",弹出如下图所示界面:
点击”安装和部署“左边的三角形,选择下面的”Visual studio Installer“,再选择”安装项目“,同时将下面的命名改为”Setup“点击确定。
第二步:
点击解决方案里面生成的”Setup“,将属性中的ProtectName改为”学生寄宿系统 V1.0 “(你的项目名字)
第三步:
右击解决方案里面的”Setup“,然后再选择”属性“。弹出属性页界面如下第二张图:
再点击里面的系统必备。
重要一点:勾选"从与我的应用程序相同的位置下载系统必备组件(D)",其实意思就是说你勾选后,生成安装项目时,在你安装项目的路径下,会有你在系统必备组件列表中勾选的组件.(系统自动完成,这一点还不错,不需要你自己去下载组件)
1)、Windows Installer 3.1(必选)
2)、.NET Framework 3.5 (可选)参考最后说明
3)、Crystal Report Basic for Visual Studio2008(x86,x64) (可选) 项目中用到了水晶报表就需要勾选此项
第四步:
右击”应用程序文件夹“,点击”添加“,再点击文件夹,命名为”DB“(可随意)用于存放你的数据库文件。
然后再右击刚才添加好的"DB"文件夹,”添加“,”文件“,将你的数据库添加进来。
第五步:
右击”应用程序文件夹“,点击”添加“,点击”文件“。将你的Release目录下面的文件全部添加进来。
第六步:
右击”应用程序文件夹“,点击”添加“,选择”项目输出...“,注意:在项目栏要选择你自己的项目(我的项目名:StudentJisu),然后选择”主输出“,点击确定。
第七步:
创建桌面快捷方式,右击刚才添加的”主输出“,然后选择第一个”创建快捷方式“,然后你可以将快捷方式重新命名(我重新命名为:学生寄宿管理系统)
最后,鼠标左键点住快捷方式,然后拖放到”用户桌面“文件夹下面。
第八步:
创建卸载程序。右击”应用程序文件夹“,点击”添加“,选择”文件“,然后将"C:\Windows\System32" 下面的”msiexec.exe“文件给添加进来,如果找不到,你可以直接搜。当然,你也可以再给msiexec.exe创建一个快捷方式命名为”UnInstall“。
命名了快捷方式之后,将Setup属性(点击解决方案里面的setup弹出属性)ProductCode拷贝到Uninstall属性的Arguments里面:
同时在前头加上 ”/X “,注意:x后面有一个空格。
第九步:
改变桌面快捷方式的Logo。自带的logo实在是太挫了,你可以去网上下载一个图片,然后转换为.ico格式。
下图中”应用程序文件夹“是指logo存放的位置,一般存在在该处就行了。
第十步:
附加数据库。我们现在添加一个类,用于编写附加数据库代码。
右击”解决方案“,点击”添加“,选择”新建项目“,然后新建一个C#类库,并命名为”InstallDB“。
最后,将”class1.cs“删掉。
第十一步:
新建一个类,用于写数据库附加到 数据库管理系统中的 代码。右击刚新建的那个”InstallDB“,点击”添加“,选择”新建项“。
然后在弹出的界面中,选择”安装程序类“,并命名为”InstallDB.cs“。
第十二步:
由于附加数据库需要用户输入本机数据库的一些信息,比如:服务器名称,数据库管理员名称和密码等等。这时候,我们可以在安装过程中弹出一个等待用户输入的框:
右击”Setup“,点击”视图“,选择”用户界面“。弹出如下第二个界面,再右击”启动“,点击“添加对话框”,选择”文本框(A)“,同时将其拖放到”欢迎使用“下面,如下第三张图。
最后,根据自己的需要填写”文本框(A)“的属性,可以参考第三张图。
注:里面定义的变量,主要是为了下面的附加代码而定义的。
第十三步:
添加 附加数据库的 主输出。右击”setup“,选择”视图“,”自定义操作“。
然后,右击”安装“,选择”应用程序文件夹“,选择安装程序类”InstallDB“,还是选择”主输出“,确定。
接着,在CostomActionData里面复制粘贴如下:
- <span style="font-family:Comic Sans MS;">/dbname=[DBNAME] /server=[SERVER] /user=[USER] /pwd=[PWD] /targetdir="[TARGETDIR]\"</span>
第十四步:
在InstallDB.cs中编写附加数据库代码。先点击”单机此处切换到代码视图“。
然后添加 几个 命名空间。
当然,要使用MessageBox()函数,需要添加using System.Windows.Forms;之外,同时需要添加System.Windows.Forms引用(具体操作:右击InstallDB,选择添加引用,选择.NET)
当然,最后写好的代码,如下所示:
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.Linq;
using System.Data.SqlClient;
using System.Windows.Forms;
using System.IO;
using System.Security.AccessControl; namespace InstallDB
{ [RunInstaller(true)] public partial class InstallDB : System.Configuration.Install.Installer { public InstallDB() { InitializeComponent(); } //创建数据库 private void CreateDataBase(string strSql, string DataName, string strMdf, string strLdf, string path) { SqlConnection myConn = new SqlConnection(strSql); String str = null; try { str = @" EXEC sp_attach_db @dbname='" + DataName + "',@filename1='" + strMdf + "',@filename2='" + strLdf + "'"; SqlCommand myCommand = new SqlCommand(str, myConn); myConn.Open(); myCommand.ExecuteNonQuery(); MessageBox.Show("数据库安装成功!点击确定继续");//需Using System.Windows.Forms } catch (Exception e) { MessageBox.Show("数据库安装失败!" + e.Message + "\n\n" + "您可以手动附加数据"); System.Diagnostics.Process.Start(path);//打开安装目录 } finally { myConn.Close(); } } //权限管理 private static void SetFullControl(string path) { FileInfo info = new FileInfo(path); FileSecurity fs = info.GetAccessControl(); fs.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow)); info.SetAccessControl(fs); } //重载的Install函数 public override void Install(System.Collections.IDictionary stateSaver) { string server = this.Context.Parameters["server"];//服务器名称 string uid = this.Context.Parameters["user"];//SQlServer用户名 string pwd = this.Context.Parameters["pwd"];//密码 string path = this.Context.Parameters["targetdir"];//安装目录 string ch = path.Substring(path.Length - 1, 1); if (ch == @"\") //对路径进行处理,判断末尾是否有'\' path = path.Substring(0, path.Length - 1);//有则删掉 string strSql = "server=" + server + ";uid=" + uid + ";pwd=" + pwd + ";database=master";//连接数据库字符串 string DataName = @"StuBoardDB";//数据库名 string strMdf = path + @"XSJSGLXT.mdf";//MDF文件路径,这里需注意文件名要与刚添加的数据库文件名一样! SetFullControl(strMdf); //设置权限为EveryOne string strLdf = path + @"XSJSGLXT_log.ldf";//LDF文件路径 SetFullControl(strLdf); //设置权限为EveryOne base.Install(stateSaver); this.CreateDataBase(strSql, DataName, strMdf, strLdf, path);//开始创建数据库 } }
}
可能你看到代码比较多,其实这些你都可以重用,你只需要改其中的一点点就行了。如下图(黑框里面的东西):你懂得。
第十五步:
好了,最后,生成安装包。
参考文献:宽田的博客园.c# winform 打包(带数据库安装)[CP/OL].http://www.cnblogs.com/scottckt/archive/2011/05/14/2046313.html,2011-05-14/2014-07-08
邢海芳的CSDN博客.VS2010 C/S模式winForm打包部署.详细![CP/OL].http://blog.csdn.net/xhf55555/article/details/7702212,2012-06-29/2014-07-08
C# winform程序打包安装(图解)相关推荐
- c# winform 程序打包部署
c# winform 程序打包部署 1 新建一个 c# 安装部署项目 2 在文件系统编辑器里把做好的项目的可执行文件及要用到的其它文件(相关dll及资源文件)添加进来(应用程序文件夹) 3 如果要在程 ...
- 一个例子说明VS2010 winform程序打包、发布教程
1.为了举个例子,先创建一个winform程序 2.窗体长这样 3.鼠标移到'解决方案 winform程序打包教程'这个项目,右键->添加->新建项目 出现下面界面 4.选择 其他项目类型 ...
- Android程序打包安装过程
Android程序打包安装过程 Android程序--编译打包--apk--签名--通过adb发布到设备上 编译打包:dx.bat:可以将bin目录下的classes文件.deseLibs依赖包打包成 ...
- C# winform程序免安装.net framework在XP/win7/win10环境运行
前文: 首先感谢群里的大神宇内流云 提供的anyexec for windows版本. 经过本人搭建虚拟机在xp环境 使用anyexec运行winfrom程序后,测试通过,如下是用的xp运行winfr ...
- vs2012 打包winform程序需要安装的 软件 InstallShield2012SPRLimitedEdition.exe 下载
链接: https://pan.baidu.com/s/1xJRTBCSWcf87sIypWuupMA 提取码: xw22 复制这段内容后打开百度网盘手机App,操作更方便哦
- winform程序打包成exe文件
拿到一个实现功能的winform小程序,如何利用NSIS工具制作安装包? 1.NSIS工具下载地址 点我下载 2.启动NSIS工具,如图点击 3.选择"使用脚本向导创建新的脚本文件" ...
- mysql表打包到程序中_C#/winform程序打包布署 如何把SQL 数据库 一起打包进去?
打包数据库到安装程序中 方法1. 备份/恢复 先备份数据库: backup database 数据库 to disk='c:\备份.bak' 将备份文件打包到安装程序中. 在第一次运行程序的时候,进行 ...
- winform程序打包EXE三种方式
1.利用VS自带的打包工具 教程:http://www.cnblogs.com/iiwen/p/5310184.html 优点:微软自带的,而且大部分人都是用的这种发布方式,具有安装步骤.更专业 缺点 ...
- linux程序打包安装,制作Linux下程序安裝包——使用腳本打包bin、run等安裝包
制作簡單的安裝包的時候可以簡單的用cat命令連接兩個文件,然后頭部是腳本文件,執行的時候把下面的文件分解出來就行了.一般這個后部分的文件是個壓縮包,那樣,就能夠打包很多文件了,在腳本中解壓出來即可.這 ...
最新文章
- ios wallet开发_iOS: 使用UICollectionView实现Wallet效果
- win 下squid的配置
- NiftyNet开源平台使用
- 堪称艺术品级的应用开发框架,Abp有望超越Spring?
- linux shell if -a 到-z参数含义
- python 重启电脑_如何在系统重启后恢复Python脚本?
- QSqlQueryModel结合QTreeView遇到的查询结果不显示的问题
- WPF中XAML中使用String.Format格式化字符串示例
- 100万并发连接服务器笔记之Java Netty处理1M连接会怎么样
- uni-app 微信公众号支付
- html右键打印,怎么在鼠标右键添加打印选项?
- R语言使用ggplot2包使用geom_density()函数绘制分组密度图(填充色配置、半透明填充色、添加均值线)实战(density plot)
- c语言错误1083,没有混音设备可用,启动Windows Audio服务时错误1083
- U盘提示格式化,8G的U盘变成了8M,并无法格式化打不开U盘解决方法
- webstorm 使用技巧
- Android Studio代码统计插件Statistic
- simpleCaptcha语音验证码实现及其扩展
- struts2接收文件全是后缀名tmp解决办法
- 检测到u盘但是计算机没有反应,u盘插上电脑没反应,教您修复无法识别u盘问题...
- strrchr()函数
热门文章
- FPGA_LVDS差分信号简单处理
- 葛洲坝电力集团责任有限公司携手蓝天梦共度新的开始
- 圣杯布局、双飞翼布局
- sublime插件神器
- BIM技术汇报视频2部
- Android--混淆配置
- Linux dosfsck 命令
- 【Bug】No validator... javax.validation.constraints.NotBlank validating type java.lang.Integer
- Appium Desired Capabilities简单使用
- 聚焦大数据时代下的房地产创新