日期:2012-08-01  浏览次数:20503 次

在C#中部署应用程序

在Visual Studio.NET中部署工程非常简单。大部分程序都可以通过一些方便的向导自动完成,而不需要费什么力气。但是要记住,根据请看,可能还需要在机器上安装Windows组件的更新Beta 1版。当然还需要Microsoft .NET框架。还要注意一点:Microsoft说当前的部署到了将来可能会无效。


一旦在Visual Studio中完成了应用程序的编写,就可以按照下述步骤开始部署:


首先,从文件菜单中选择增加新的工程文件:



然后,选择设置和部署工程,这时Visual Studio会提供一个部署工程的选项列表,根据是否要部署到Web上,再决定是采取压缩的.cab文件形式,还是采取Windows Setup程序的形式:




下表是不同类型的工程文件设置以及它们的描述和用途:


工程设置类型 描述 用途

CAB工程: 一个Microsoft压缩Cabinet文件,可以用cabarc.exe打开。 用于部署可从网上下载的应用程序。

部署向导:为web创建部署文件,或者为使用.msi设置文件的windows安装程序创建部署文件,并且将它们部署到远程机器或本地机器上。 用于同时为工程创建设置文件和部署文件。

合并模块:被不同应用程序共享的包组件。 部署一个组件库。
Web设置向导 为基于web的应用程序创建一个安装程序,程序将安装在一个web服务器的虚拟根目录中。 用于为web服务器创建安装程序。

设置向导:使用一个.msi设置文件为windows安装程序创建设置文件。 用于创建设置文件。看起来好象只创建了.msi文件,但所有东西都压缩在这个文件中。运行时将程序放在程序文件目录中。



我们选择使用设置向导来部署这个特定的应用程序。设置向导为创建设置工程文件提供了很好的step by step对话框:



同对话框中所指出的一样,向导创建了一个安装器,你可以用它来安装工程文件。下一屏询问希望创建哪种类型的安装器:



我们想要的是一个完全的老式Windows安装样式,因此选择“Create a setup for a rich client application”。下一屏提示要安装到哪个文件中:



如果只是想部署没有源代码或文档的应用程序,那么就选择“Primary output”(基本输出)。这样就为应用程序部署了必要的exe文件和dll文件。

下一屏提示想要包含在安装文件中而Microsoft没有包括的附加文件,如readme.txt、web pages等。在Hangman的情况下,我们增加了声音文件:



最后一屏是一个报告,告诉完成了什么以及创建的vdp(visual deployment project)在哪里:



点击“Finish”(结束)之后,就为部署创建了一个目录。现在需要建立工程文件以便部署它,因此从“创建”菜单中选择“创建方案”(build solution),这样就创建了安装应用程序所需要的MySetupProject.msi文件。


创建MySetupProject.msi后,双击它就会启动安装程序。对于大多数安装程序来说,这只是意味着将所有必要的文件全部复制到program files下的目录中。在这里的hangman工程文件中,这些文件指的是所有System.xxx.dll文件、Microsoft.xxx.dll文件(CLR 库)、nlp文件(通用语言资源)、运行时间类库mscorlib.DLL、mngdist.dll(可能是管理发送的)、xxx.wav(声音文件),当然还有可执行文件,在这里是Hangman.exe。


获取主机的IP地址

可以用.Net的DNS类来获取一个主机名或一个给定主机的IP地址。要想在程序中使用DNS类,就需要包含System.Net:


Include System.Net Reference


比如说想获取http://www.mindcracker.com/的IP地址,以下代码就会完成这个任务:


// Call DNS.GetHostName to get IPHostEntry and get the IP address list.

IPHostEntry ipEntry = DNS.GetHostByName ("www.mindcracker.com");


IPAddress [] IpAddr = ipEntry.AddressList;



for (int i = 0; i < IpAddr.Length; i++)


{


Console.WriteLine ("IP Address {0}: {1} ", i, IpAddr.ToString ());


}


另外,使用无参数的GetHostName可以返回本地机器的主机名:


string strHostName = DNS.GetHostName ();


然后将这个主机名作为参数传递给GetHostByName,就可以获取本地机器的IP地址信息。


如何调用对话信息框?


MessageBox.Show("Inavlid File", "File Open Result", MessageBox.OKCancel | MessageBox.IconHand);


如何调用Windows API?

在C#中调用一个API同在VB中调用API一样。我们应该知道API的DLL名称,并且使用sysimport引入它。下面这个例子显示了如何调用MessageBox API:


using System;


class callAPICls {


[sysimport(dll="user32.dll")]


public static extern int MessageBoxA(int h, string m, string c, int type);


public static int Main()


{


return MessageBoxA(0, "Hello World!", "Caption", 0);


}


}