在这个项目的开发过程中,我们力求使这个工具的界面看起来美观,因为是多媒体产品吗,保持界面的统一性和交互的统一性都是非常重要的,界面大气、古朴,功能也不弱,内容比较丰富,这样就会使这个产品给客户和豫剧的爱好者们留下深刻的印象。
        我们这个产品的winform界面需求基本有以下两点:
        1、窗口界面是不规则窗口;
        2、窗口里的控件的形状、边框、底纹......可以根据设计师的要求进行制作;
        看到这里,呵呵,大家都会想,如果这样的话,还不如用Director这一类的程序制作更简单,但要知道,我们软件的功能主要是数据库操作,数据库容量也比较大,用Director这一类这一类的东西,一是:效率不高,二是:虽然有第三方的插件支持,但是都不是免费的、而且谁又敢保证它的效率很高呢?对于这样的应用程序来说VB是最佳选择。
        针对上面的第一点是比较好解决的,因为在VB.net中有很方便的不规则窗口的制作机制,使我们能够很方便的制作出不规类型的窗口。
        但是对于上边的第二点却没有那么容易,我们现在对WinFormUI的设计一般采用四种方法:
        1、利用.net GDI+、ApI开发自定义的空间,但这种方法相对比较复杂,技术难度大,而且会使软件的复杂度提高不少,我们也没有那么多的人力、物力、时间去投入;
        2、使用Windows Shell Style,现在有很多这样的厂商在做Shell Style,它们都有大量的Dll供我们使用,但是我们以前没有这方面的经验,我们还要对Dll接口熟悉,了解得过程显然存在着不少的未知数;
        3、使用FlashUI组件,呵呵,这个好像是比较好的解决方案,Flash有内置的强大的Action语言,有着非常不错的绘图工具,有着对Xml、html的良好的支持,........而且VB.net中使用Flash也不是很难,Flash中的FScommand还能和VB通信,呵呵,真不错,不过复杂度还是高了点,要知道在Flash中开发组件也不是那么容易的,呵呵^_^;
        4、使用html、asp、php、aspx......呵呵,对了,这个最容易了,强大的CSS2.0,我们可以对页面上的任何东西进行控制,入门又底,呵呵,终于找到好的方法了;

         其实对于第四种方法,现在的应用程序应用的很多的,举几个例子微软的大百科词典,呵呵,做的太酷了,十足一个强大的多媒体系统,它里面的界面元素基本上都是html的,呵呵,使用了大量的flash元素.......,还有就是著名的安装工具Installshield......太多了,其实这种程序太多了。
        我们确定用第四种的方法,在开发的过程中,我们把程序查询界面都做成网页的形式,这时候我们在想为什么我们不能把查询功能作上去呢,也就是用动态页面,这样功能和界面都能保证,呵呵,我们首相想到了可能是叫做netbox的产品,它好像能够实现在光盘上发布一个动态的网站,也就是服务器宿主环境,呵呵,后来又想起来,在msdn上介绍的一个宿主环境Cassini ,它可以宿主Asp.net,于是下下来研究一番,呵呵,不过好像是没有搞得太清楚,呵呵
        介绍地址为:http://www.microsoft.com/china/msdn/library/webservices/asp.net/Cassinihostasp.mspx
        这个宿主环境也是一个开源的产品,我们都应该好好研究研究。
        它在微软的Asp.net网站上的讨论还是比较多的。
         对于我们Asp.net开发人员来说,www.asp.net是很好的去处。
 
        我们可以把这个服务器的宿主环境放在光盘上运行,或者打包到应用程序当中去,在客户端运行,配合Webbowser控件呵呵,就能开发出比较便捷的程序。
        不过对于在客户端部署来说,它要求要禁用客户端的iis,这一点不爽。
        这时侯大家又会说,我们可以使用Winform去扑捉Webbowser控件的事件从而去进行相关的操作,我们还可以把数据库转换成xml进行相关的数据访问,呵呵,我对Winform去扑捉Webbowser控件的事件没有研究过,个人水平还达不到那种程度,如果有高手知道,一定要教教我。我对ie的编程没有研究......
        在那篇msdn的文章里其实把这个宿主环境的应用已经交待清楚了,我们初步能达到会用就可以了,呵呵
        我们在应用程序在客户端运行应用程序时,可能需要一个启动它服务的代码:
        可能是:

Private Sub StartService()
        Dim ProcessServer As New Process     '*新建一个进程
        Dim VirString As String

        Try
'*---------开始禁用iis
            ProcessServer.StartInfo.FileName = "net.exe"
            ProcessServer.StartInfo.Arguments = "stop iisadmin /Y"
            ProcessServer.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
            ProcessServer.Start()
            ProcessServer.WaitForExit()
'*---------开始运行服务
            VirString = Replace(Application.StartupPath, "\", "\\")
            ProcessServer.StartInfo.FileName = Application.StartupPath + "\CassiniWebServer.exe"
            ProcessServer.StartInfo.Arguments = VirString + "\Dummy 80 /"
            ProcessServer.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
            ProcessServer.Start()
'*---------记录进程pid,以便在应用程序结束时杀死进程。
           ProcessServerId = ProcessServer.Id
        Catch ex As Exception
            MessageBox.Show(ex.Message.ToString())
        End Try
    End Sub
        下面是应用程序结束时杀死宿主进程代码
Private Sub KillProcess()
        Try
            Dim ProcessKill As Process = Process.GetProcessById(ProcessServerId)
            ProcessKill.Kill()
        Catch ex As Exception
            MessageBox.Show(ex.Message.ToString())
        End Try
 
    End Sub
         个人认为,对于我们这个程序来说,这样的一个宿主环境的使用还是有点麻烦,但我的大部分工作时做多媒体方面的开发,我觉得这样的一个宿主环境对于我们使用光盘为载体发布媒体还是大有用处的,关键是如果我们对他的开发原理搞清楚,我们能够学到很多的东西,我们一块来努力!

                                                                                            <未完,待续!>