|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我也不知道,我原来理解的,NET就是C++编程,只是与JAVA相对,呵呵。以为.ET就是高级C++编程。 一).创立部署项目
1.在“文件”菜单上指向“增加项目”,然后选择“新建项目”。
2.在“增加新项目”对话框中,选择“项目范例”窗格中的“安装和部署项目”,然后选择“模板”窗格中的“安装项目”。在“称号”框中键进setup1。
3.单击“断定”封闭对话框。
4.项目被增加到办理计划资本办理器中,而且文件体系编纂器翻开。
5.在“属性”窗口中,选择ProductName属性,并键进信息办理体系。
二).将主程序项目标输入增加到部署项目中
1.在“文件体系编纂器”中,选择“使用程叙文件夹”。在“操纵”菜单上,指向“增加”,然后选择“项目输入”。
2.在“增加项目输入组”对话框中,选择“项目”下拉列表中的“你的程序”。
3.单击“断定”封闭对话框。
4.从列表当选择“主输入”和“内容文件”组,然后单击“断定”。
三).创立安装程序类
1.在“文件”菜单上指向“新建”,然后选择“项目”。
2.在“新建项目”对话框中,选择“项目范例”窗格中的“VisualBasic项目”,然后选择“模板”窗格中的“类库”。在“称号”框中键进installDB。
3.单击“翻开”封闭对话框。
4.从“项目”菜单当选择“增加新项”。
5.在“增加新项”对话框当选择“安装程序类”。在“称号”框中键进installDB。
6.单击“断定”封闭对话框。
7.具体代码附后。
四).创立自界说安装对话框
1.在办理计划资本办理器当选择“setup1”项目。在“视图”菜单上指向“编纂器”,然后选择“用户界面”。
2.在用户界面编纂器中,选择“安装”下的“启动”节点。在“操纵”菜单上,选择“增加对话框”。
3.在“增加对话框”对话框中,选择“允许协定”对话框,然后单击“断定”封闭对话框。
4.在“增加对话框”对话框中,选择“文本框(A)”对话框,然后单击“断定”封闭对话框。
5.在“操纵”菜单上,选择“上移”。反复此步骤,直到“文本框(A)”对话框位于“安装文件夹”节点之上。
6.在“属性”窗口中,选择BannerText属性并键进:安装数据库.
7.选择BodyText属性并键进:安装程序将在方针呆板上安装数据库
8.选择Edit1Label属性并键进:数据库称号:
9.选择Edit1Property属性并键进CUSTOMTEXTA1
10.选择Edit1Value属性并键进:dbservers
11.选择Edit2Label属性并键进:服务器名:
12.选择Edit2Property属性并键进CUSTOMTEXTA2
13.选择Edit2Value属性并键进:(local)
14.选择Edit3Label属性并键进:用户名:
15.选择Edit3Value属性并键进:sa
16.选择Edit3Property属性并键进CUSTOMTEXTA3
17.选择Edit4Label属性并键进:暗码:
18.选择Edit4Property属性并键进CUSTOMTEXTA4
19.选择Edit2Visible、Edit3Visible和Edit4Visible属性,并将它们设置为true
五).创立自界说操纵
1.在办理计划资本办理器当选择“setup1”项目。在“视图”菜单上指向“编纂器”,然后选择“自界说操纵”。
2.在自界说操纵编纂器当选择“安装”节点。在“操纵”菜单上,选择“增加自界说操纵”。
3.在“选择项目中的项”对话框中,双击“使用程叙文件夹”。
4.选择“主输入来自installDB(举动)”项,然后单击“断定”封闭对话框。
5.在“属性”窗口中,选择CustomActionData属性并键进“/dbname=[CUSTOMTEXTA1]/server=[CUSTOMTEXTA2]/user=[CUSTOMTEXTA3]/pwd=[CUSTOMTEXTA4]/targetdir="[TARGETDIR]"”。
附:/targetdir="[TARGETDIR]"是安装后的方针路径,为了在installDB类中取得安装后的路径,我们设置此参数。
六).打包r到场卸载功效:
办法一:
1.在打包目中增加文件msiexec.exe(一样平常可在c:windowssystem32下找到)
2.在文件系yD中x贸绦蛭募A,在msiexec.exe上按右I,x建快速体例,重定名快速体例"卸载".
3.变动此快速体例的Arguments为"/x{a品id}",a品id的值榇虬目标ProductCode傩灾.
办法二:(保举)
1.师长教师成安装包,记下ProductCode(选择办理计划资本办理器根目次如setup1,再检察属性标签,不是右键中的属性),上面要用到
2.用VS.net创建一个新的把持台程序uninst.exe文件
powerby:landlordh
for2000,xp,2003
Moduleuninstall
SubMain()
DimmyProcessAsProcess=NewProcess
IfSystem.Environment.OSVersion.ToString.IndexOf("NT5")Then
myProcess.Start("msiexec","/X{2B65D4A9-C146-4808-AB4B-321FB0779559}")
改成本人的ProductCode
EndIf
myProcess.Close()
EndSub
EndModule
3.将把持台程序BIN目次的exe文件到场到打包程叙文件中,在程序组创立uninst.exe的快速体例
installdb.vb类,要增加援用system.configuration.install.dll:
usingSystem;
usingSystem.Collections;
usingSystem.ComponentModel;
usingSystem.Configuration.Install;
usingSystem.Reflection;
usingSystem.IO;
usingSystem.Data;
usingSystem.Data.SqlClient;
namespaceinstall
{
///<summary>
///Installer1的择要申明。
///</summary>
[RunInstaller(true)]
publicclassInstaller1:System.Configuration.Install.Installer
{
///<summary>
///必须的计划器变量。
///</summary>
privateSystem.ComponentModel.Containercomponents=null;
publicInstaller1()
{
//该挪用是计划器所必须的。
InitializeComponent();
//TODO:在InitializeComponent挪用后增加任何初始化
}
///<summary>
///清算一切正在利用的资本。
///</summary>
protectedoverridevoidDispose(booldisposing)
{
if(disposing)
{
if(components!=null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}
#region组件计划器天生的代码
///<summary>
///计划器撑持所需的办法-不要利用代码编纂器修正
///此办法的内容。
///</summary>
privatevoidInitializeComponent()
{
components=newSystem.ComponentModel.Container();
}
#endregion
privatestringGetSql(stringName)
{
////挪用osql实行剧本
//
//System.Diagnostics.ProcesssqlProcess=newSystem.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"],"master",this.Context.Parameters["targetdir"]);
//
//sqlProcess.StartInfo.WindowStyle=System.Diagnostics.ProcessWindowStyle.Hidden;
//
//sqlProcess.Start();
//
//sqlProcess.WaitForExit();//守候实行
//
//sqlProcess.Close();
try
{
//AssemblyAsm=Assembly.GetExecutingAssembly();
//System.IO.FileInfoFileInfo=newSystem.IO.FileInfo(Asm.Location);
//stringpath=FileInfo.DirectoryName+@""+Name;
stringpath=this.Context.Parameters["targetdir"]+Name;
FileStreamfs=newFileStream(path,FileMode.Open,FileAccess.Read,FileShare.Read);
StreamReaderreader=newStreamReader(fs,System.Text.Encoding.Default);
//System.Text.Encoding.ASCII;
returnreader.ReadToEnd();
}
catch(Exceptionex)
{
Console.Write("InGetSql:"+ex.Message);
throwex;
}
}
privatevoidExecuteSql(stringDataBaseName,stringSql)
{
SqlConnectionsqlConnection1=newSqlConnection();
sqlConnection1.ConnectionString=string.Format("server={0};userid={1};password={2};Database=master",this.Context.Parameters["server"],this.Context.Parameters["user"],this.Context.Parameters["pwd"]);
System.Data.SqlClient.SqlCommandCommand=newSystem.Data.SqlClient.SqlCommand(Sql,sqlConnection1);
try
{
Command.Connection.Open();
Command.Connection.ChangeDatabase(DataBaseName);
Command.ExecuteNonQuery();
}
catch(Exceptionex)
{
Console.Write("Inexceptionhandler:"+ex.Message);
}
finally
{
Command.Connection.Close();
}
}
protectedvoidAddDBTable(stringstrDBName)
{
try
{
ExecuteSql("master","CREATEDATABASE"+strDBName);
ExecuteSql(strDBName,GetSql("sql.txt"));
ExecuteSql("master","execsp_addloginmyoamaster,myoamaster,"+strDBName+",Null,Null");
ExecuteSql(strDBName,"EXECsp_grantdbaccessmyoamaster,myoamaster");
ExecuteSql(strDBName,"execsp_addrolememberdb_owner,myoamaster");
}
catch(Exceptionex)
{
Console.Write("Inexceptionhandler:"+ex.Message);
}
}
publicoverridevoidInstall(System.Collections.IDictionarystateSaver)
{
base.Install(stateSaver);
AddDBTable(this.Context.Parameters["dbname"]);
}
}
}
这里有个sql.txt是数据库的sql剧本,固然能够挪用osql来实行sql剧本,实际上是一样的。
打包的时分必需把sql.txt文件加出去,不然不会实行。
假如你想附加数据库的mdf文件和ldf文件,用上面这段程序:
privatevoidCreateDataBase(stringstrSql,stringDataName,stringstrMdf,stringstrLdf)
{
Stringstr;
SqlConnectionmyConn=newSqlConnection(strSql);
//EXECsp_detach_db@dbname=BX_FreightMileage_2//必要先将数据库分别出来
str="EXECsp_attach_db@dbname="+DataName+",@filename1="+strMdf+",@filename2="+strLdf+"";
SqlCommandmyCommand=newSqlCommand(str,myConn);
myConn.Open();
myCommand.ExecuteNonQuery();
myConn.Close();
}
固然打包的时分也要把这两个数据库文件也加出去。
捆绑编译器。用户不需要受制于厂家,自己就能将程序在新平台上编译运行。除了牛B轰轰的linux,估计也没有系统捆绑c/c++的编译器,而且许多新平台都无法支持复杂的c/c++编译器在上面直接运行。 |
|