我用C#写好了一个小程序,怎样将它打包成应用程序,就是可以在别的电脑直接点击了就运行? 具体点,谢谢了 c#窗体如何完成一个简单小程序

作者&投稿:占言 (若有异议请与网页底部的电邮联系)
DotNet(C# )系统安装程序制作StepByStep(包括FrameWork安装和数据库安装...

如果你的程序不涉及数据库,则跳过数据库的部分。

首先需要把你要建立的数据库表结构导出来,使用slqserver的导出向导导出表结构,先保存到db.sql文件中吧。

可选步骤:安装Framework引导程序插件。
安装了这个插件你制作的安装包就通过 Microsoft Visual Studio .NET 2003 引导程序插件,您可以轻而易举地创建安装程序,将 .NET Framework 1.1随您的应用程序一起重新分发。
引导程序插件 PluginInstaller.msi 的下在地址:
http://www.microsoft.com/downloads/details.aspx?FamilyID=627921a0-d9e7-43d6-a293-72f9c370bd19&displaylang=zh-cn
第一步:创建部署项目
1. 在“文件”菜单上指向“添加项目”,然后选择“新建项目”。
2. 在“添加新项目”对话框中,选择“项目类型”窗格中的“安装和部署项目”,然后选择“模板”窗格中的“安装项目”。在“名称”框中键入 Setup。
3. 单击“确定”关闭对话框。
4. 项目被添加到解决方案资源管理器中,并且文件系统编辑器打开。

第二步:创建安装程序类
1. 在“文件”菜单上指向“新建”,然后选择“项目”。
2. 在“新建项目”对话框中,选择“项目类型”窗格中的“项目”,然后选择“模板”窗格中的“类库”。在“名称”框中键入 DBCustomAction。
3. 单击“打开”关闭对话框。
4. 从“项目”菜单中选择“添加新项”。
5. 在“添加新项”对话框中选择“安装程序类”。在“名称”框中键入 DBCustomAction。
6. 单击“确定”关闭对话框。(代码附后)
第三步:将项目的输出添加到部署项目中
1. 在“文件系统编辑器”中,选择“应用程序”文件夹。在“操作”菜单上,指向“添加”,然后选择“项目输出”。
2. 在“添加项目输出组”对话框中,选择“项目”下拉列表中你的项目。
3. 单击“确定”关闭对话框。
4. 从列表中选择“主输出”,然后单击“确定”。
第四步:创建自定义安装对话框
1. 在解决方案资源管理器中选择“Setup”项目。在“视图”菜单上指向“编辑器”,然后选择“用户界面”。
2. 在用户界面编辑器中,选择“安装”下的“启动”节点。在“操作”菜单上,选择“添加对话框”。
3. 在“添加对话框”对话框中,选择“许可协议”对话框,然后单击“确定”关闭对话框。
4. 在“添加对话框”对话框中,选择“文本框 (A)”对话框,然后单击“确定”关闭对话框。
5. 在“操作”菜单上,选择“上移”。重复此步骤,直到“文本框 (A)”对话框位于“安装文件夹”节点之上。
6. 在“属性”窗口中,选择 BannerText 属性并键入:安装数据库.。
7. 选择 BodyText 属性并键入:安装程序将在目标机器上安装数据库。
8. 选择 Edit1Label 属性并键入:数据库名称:。
9. 选择 Edit1Property 属性并键入 CUSTOMTEXTA1。
10. 选择 Edit1Value 属性并键入:GsCrm。
11. 选择 Edit2Label 属性并键入:服务器名:。
12. 选择 Edit2Property 属性并键入 CUSTOMTEXTA2。
13. 选择 Edit2Value 属性并键入:(local)。
14. 选择 Edit3Label 属性并键入:用户名:。
15. 选择 Edit3Value 属性并键入:sa。
16. 选择 Edit3Property 属性并键入 CUSTOMTEXTA3。
17. 选择 Edit4Label 属性并键入:sa用户密码:。
18. 选择 Edit4Property 属性并键入 CUSTOMTEXTA4。

第五步:创建自定义操作
1. 在解决方案资源管理器中选择“Setup”项目。在“视图”菜单上指向“编辑器”,然后选择“自定义操作”。
2. 在自定义操作编辑器中选择“安装”节点。在“操作”菜单上,选择“添加自定义操作”。
3. 在“选择项目中的项”对话框中,双击“应用程序文件夹”。
4. 选择“主输出来自 DBCustomAction(活动)”项,然后单击“确定”关闭对话框。
5. 在“属性”窗口中,选择 CustomActionData 属性并键入 /dbname=[CUSTOMTEXTA1] /server=[CUSTOMTEXTA2] /user=[CUSTOMTEXTA3] /pwd=[CUSTOMTEXTA4] /targetdir="[TARGETDIR]\"。
附/targetdir="[targetdir]\"是安装后的目标路径,为了在dbcustomaction类中获得安装后的路径,我们设置此参数。
另外,安装后的路径也可以通过Reflection得到:
Dim Asm As System.Reflection.Assembly = _
System.Reflection.Assembly.GetExecutingAssembly
MsgBox("Asm.Location")

第六步:添加db.sql以及你需要的其他文件到项目中,然后就可以打包了。

还 有最重要的一个问题,当时困扰了我三个多小时,就是用.net这个程序打包的程序,安装过程用户所选择的安装路径中是不能含有空格的。为什么呢?原来是 sql server的osql的执行命令行方式的时候,如果你的安装路径中含有空格的话,那个命令行是不能正确的执行的。“osql -U userId -P password -d dbname -i c:\test\db.sql”

另外安装的时候也可以直接修改安装后的app.config来完成你的配置,李洪根的文章中有相关介绍。

DBCustomAction.cs

using System;
using System.Data.SqlClient;
using System.Collections;
using System.ComponentModel;
using System.Configuration.Install;

namespace DBCustomAction
{
/// <summary>
/// DBCustomAction 的摘要说明。
/// </summary>
[RunInstaller(true)]
public class DBCustomAction : System.Configuration.Install.Installer
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;

public DBCustomAction()
{
// 该调用是设计器所必需的。
InitializeComponent();

// TODO: 在 InitializeComponent 调用后添加任何初始化
}

/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion

private void ExecuteSql(string connStr,string DatabaseName, string Sql)
{
SqlConnection conn = new SqlConnection(connStr);
SqlCommand cmd = new SqlCommand(Sql, conn);

conn.Open();
conn.ChangeDatabase(DatabaseName);
try
{
cmd.ExecuteNonQuery();
}
finally
{
conn.Close();
}
}

public override void Install(System.Collections.IDictionary stateSaver)
{
base.Install(stateSaver);
try
{
//------------------------建立数据库----------------------------
string connStr = string.Format("data source={0};user id={1};password={2};persist security info=false;packet size=4096", this.Context.Parameters["server"], this.Context.Parameters["user"], this.Context.Parameters["pwd"]);
ExecuteSql(connStr, "master", "CREATE DATABASE " + this.Context.Parameters["dbname"]);

System.Diagnostics.Process sqlProcess = new System.Diagnostics.Process();
sqlProcess.StartInfo.FileName = "osql.exe";
sqlProcess.StartInfo.Arguments = string.Format(" -U {0} -P {1} -d {2} -i {3}db.sql", this.Context.Parameters["user"], this.Context.Parameters["pwd"], this.Context.Parameters["dbname"], this.Context.Parameters["targetdir"]);
sqlProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
sqlProcess.Start();
sqlProcess.WaitForExit(); //等待执行
}
catch(Exception e)
{
Console.Write(e.ToString());
}
finally
{
}
}
}
}

第六步:添加db.sql以及你需要的其他文件到项目中,然后就可以打包了。

还 有最重要的一个问题,当时困扰了我三个多小时,就是用.net这个程序打包的程序,安装过程用户所选择的安装路径中是不能含有空格的。为什么呢?原来是 sql server的osql的执行命令行方式的时候,如果你的安装路径中含有空格的话,那个命令行是不能正确的执行的。“osql -U userId -P password -d dbname -i c:\test\db.sql”

另外安装的时候也可以直接修改安装后的app.config来完成你的配置,李洪根的文章中有相关介绍。

DBCustomAction.cs

using System;
using System.Data.SqlClient;
using System.Collections;
using System.ComponentModel;
using System.Configuration.Install;

namespace DBCustomAction
{
/// <summary>
/// DBCustomAction 的摘要说明。
/// </summary>
[RunInstaller(true)]
public class DBCustomAction : System.Configuration.Install.Installer
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;

public DBCustomAction()
{
// 该调用是设计器所必需的。
InitializeComponent();

// TODO: 在 InitializeComponent 调用后添加任何初始化
}

/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion

private void ExecuteSql(string connStr,string DatabaseName, string Sql)
{
SqlConnection conn = new SqlConnection(connStr);
SqlCommand cmd = new SqlCommand(Sql, conn);

conn.Open();
conn.ChangeDatabase(DatabaseName);
try
{
cmd.ExecuteNonQuery();
}
finally
{
conn.Close();
}
}

public override void Install(System.Collections.IDictionary stateSaver)
{
base.Install(stateSaver);
try
{
//------------------------建立数据库----------------------------
string connStr = string.Format("data source={0};user id={1};password={2};persist security info=false;packet size=4096", this.Context.Parameters["server"], this.Context.Parameters["user"], this.Context.Parameters["pwd"]);
ExecuteSql(connStr, "master", "CREATE DATABASE " + this.Context.Parameters["dbname"]);

System.Diagnostics.Process sqlProcess = new System.Diagnostics.Process();
sqlProcess.StartInfo.FileName = "osql.exe";
sqlProcess.StartInfo.Arguments = string.Format(" -U {0} -P {1} -d {2} -i {3}db.sql", this.Context.Parameters["user"], this.Context.Parameters["pwd"], this.Context.Parameters["dbname"], this.Context.Parameters["targetdir"]);
sqlProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
sqlProcess.Start();
sqlProcess.WaitForExit(); //等待执行
}
catch(Exception e)
{
Console.Write(e.ToString());
}
finally
{
}
}
}
}

别的电脑必须要有.NEt Framework支持……

新建一个安装向导 就可以了

我用c#和arcgis做了一个小程序,怎样能把我的程序打包,在别的没有arcgis环境和c#环境电脑下运行。~

文件-〉添加-〉新建项目,在添加新项目对话框中选择其他项目类型-安装和部署

除了添加发布的项目外,同时添加运行必须的类库,详见链接内第5步
http://wenku.baidu.com/link?url=8wdGFdI2aB3KNDNNzQywzIQyABUy7xiZmDe7i5LuUd1bIIL3OLlLDMfAXkwYCZRRo2iwPqbzGgmT9z6Aaw9R74CbzbPnt2YBlkrgldR9KWa

PS:打包就是安装的时候顺便帮你装了环境而已,不存在无环境能运行的情况

1.你把每次点击add按钮是的score值存到一个列表变量里,然后根据列表内数据计算 总和、数量、平均值,就行了,为啥要显示一个一模一样的窗体出来。
2.参数都存在列表内了,只是在做个显示不难吧

为什么要用字母c表示周长?还有,为什么要用字母s表示面积?请给我一个...
答:C就是英文字母Circumference的缩写,S就是英文字母Square的缩写,这些字母大多是有这样的来的。多边形的周长的长度也相等于图形所有边的和,圆的周长=πd=2πr (d为直径,r为半径,π),扇形的周长 = 2R+nπR÷180˚(n=圆心角角度)= 2R+kR (k=弧度)。圆:C=πd=2πr(d为直...

用纯粹的C语言能实现面向对象编程吗?
答:当然可以!面向对象本身是一种思想,而用哪种语言实现只是一种技术手段。事实上思想和技术的关系本身就是class和object的关系。class oo {//这是面向对象的思想类}; oo java; //java是oo的一个具体的技术实现oo cxx; //c++是oo的一个具体的技术实现拿Windows系统来讲,它是有C语言编写的,但是使...

计算机C语言有什么用啊??
答:1、C语言是高级语言。它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。2、C语言是结构式语言。结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式...

C语言—入门技巧大学生推荐
答:“直截了当”地方为了让事情清晰明确,法要好干其它方式。因此,变量名一目了然不仅有利于开发人员,也有利于未来的维护团队。技巧 7:少用#pragma语句 C语言中有一种特殊的#pragma语句。这些语句通常处理非标准的句法和特性,应尽可能避免使用这种语句,因为它们是非标准的不能从一个处理器移植到另一个...

能用标准的C语言做MFC的窗口程序吗吗?
答:可以。MFC 是 封装后的 WinAPI 程序,用 的是 C++.窗口程序 可以直接用 WinAPI 来写,WinAPI 可以写成 C 风格,也可以写成 C++ 风格。快速入门自学材料见:http://www.winprog.org/tutorial/ 窗口界面的 “控件”直接写资源文件也可以。但无论如何没有 MFC ( 用Visual Studio) 建立方便。即使...

C语言编程有哪些好用的软件?
答:1.C语言编程软件有哪些。Mcrosoft Visual C++ 、Microsoft Visual Studio、 DEV C++、Code::Blocks、Borland C++、WaTCom C++、Borland C++ Builder、GNU DJGPP C++、Lccwin32 C Compiler3.1、High C、Turb C、gcc、C-Free和Win-TC、My Tc等等,由于C语言比较成熟,所以编程环境很多。2.C语言入门...

用标准C语言编写学生信息管理系统
答:scanf("%c",&selmenu); //接受用户选择的功能编号 switch(selmenu) //输入不同功能编号调用相应函数来完成功能 { case'1':input(stud); //调用输入学生信息函数,参数为学生信息数组名 break;case'2':sort(stud); //调用按总分排榜函数,参数是数组名 break;case'3':find(stud...

用纯C语言编写个同学录
答:要求用纯C语言编写个33人的同学录同学录包括姓名出生年月座佑铭外号电话住址QQ号等一些基本个人信息并且要求可以随时添加和修改信息要用到数组函数调用文件调用等信息急!!!... 要求 用纯C语言编写个33人的同学录 同学录包括 姓名出生年月 座佑铭 外号电话 住址 QQ号 等一些基本个人信息 并且要求可以随时添加和...

C语言编程, 使从键盘中输入的三位数倒着输出。
答:C语言:从键盘输入一个三位数,以逆序输出。例如:输入456,输出654 如图:

用简单c语言编写计算器
答:include"stdio.h"/*预处理命令*/ void main()/*主函数*/ { double a,b;/*双精度实型变量说明*/ char c,d;/*变量说明*/ do /*循环体*/ { printf("input a (-*/)b\n");/*输入提示*/ scanf("%lf%c%lf",&a,&c,&b);/*输入算术表达式*/ if(c=='')/*判断 / printf("=...