今天测试一个Pocket上的SIP Instant Messaging client,装上了EVC4,打了SP3。Build是报错:
corelibc.lib(pegwmain.obj) : error LNK2019: unresolved external symbol _WinMain referenced in function _WinMainCRTStartup
emulatorDbg/PocketSM.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
PocketSM.exe - 2 error(s), 0 warning(s)
报错的原因是入口有问题,WinMainCRTStartup在unicode系统上应该是wWinMainCRTStartup。到中project Settings将Link >> Output >> entry-point symbol改为wWinMainCRTStartup。ReBuild,OK。EVC真是应该考虑Unicode环境编程的Programers ,能给个提示设置也好。最好是有中文版,呵呵。
创建数据库实例问题多多,忙了两天才可以,具体问题出在哪里也不知道。成功的一次:用本地administrator帐号(用属于administrator组的域帐号试了多次多没戏),没有添加示例数据(手工都没有添加上),所有管理帐号密码用的oracle(成功后改掉了)。
创建成功后重新启动用OEM居然连不到,后来用了http://hostname:5500/em 进入,告诉我需要启动数据库,难怪OEM连不上,输入了本地帐号和Oracle帐号启动了数据库后,OEM也能连得上了。
http://hostname:5500/em 的性能监测可以用SVG Viewer,呵呵
我们测试Dotnet程序一般都使用Application Center Test,如果你希望使用其他工具,可以尝试一下loadrunner(测试Java程序用过),此工具并且在组建测试模拟群方式有优势。对于.net,mercury有VS的插件。这里有个PPT(EN),介绍了测试Winform、Web、Webservice的方法。
http://www.loadtester.com/powerpoints/DOTNetLoadTesting.ppt
增加了JavaServer Faces、Struts和流程编辑器。支持J2SE1.5(Sun Realse了?)、Distributed refactoring(分布式重构)、Code audits(代码审查)、优化工具(早就有了啊)、集成软件生命期管理、UML(Together),enterprise unit testing企业单元测试(unit testing和企业有关系?)
看来比Vs.net 2005 Release的要早啊,呵呵
6月底,SUN发表了白皮书说J2EE的WebService的性能比DotNet的好,
原文:http://java.sun.com/performance/reference/whitepapers/WS_Test-1_0.pdf。
7月中,MS出来驳斥了Sun,在读写数据库、服务器、比较版本、调优等方面一一进行了说明。
http://www.theserverside.net/articles/showarticle.tss?id=SunBenchmarkResponse
我想仅仅Sun比较WebService的性能有些片面,并且服务器使用了Tomcat(J2EE App Server?呵呵),不管别的,Sun的WebService 开发效率要比DotNet的差。
题目有点问题,呵呵,EJB从出现就没有简单过,不过从JAVA或者J2EE开始算,那么就有了简单的开始。
这几天大略的看了几眼EJB 3RD EDITION? -- Rchard Monson,感觉这次EJB终于肯放下架子,学习OpenSource了。01年4月,ED项目开发时,为了开发和部署EJB度过了那么多郁闷的日子,而开发出来的系统效率之差出乎想象,紧接着的第二版就去掉了大多数的CMP。
使用EJB带给我的后遗症:就算不做JAVA项目了装完系统也会很快改环境变量中的TEMP为C:/temp。复杂的结构和众多的接口以及EJB1.0中CMP太弱导致ED项目之后就不敢再用EJB。而2.0又在兼容1.0,增加了不少的功能,不过看着就有点混乱了。
由于CMP,我对OR Mapping和持久化对象有了一定的恐惧心理,呵呵。后来看了Hibernate、JDO等等等等才发现OR Mapping和持久化对象也可以简单易用的。
而如今的EJB 总算是从高高的神坛上走下,放弃了必须穿着的厚厚的铠甲,开始学习Hibernate等OpenSource系统的长处,,也只有这样,,EJB才能摆脱最终无人问津的下场。
而DOTNET程序的OpenSource的力量比之JAVA少了太多,也许是MS提供的Framework和文档太易用了,让大家少了很多的郁闷和思考的机会。
简单就是美,而习惯了简单是不是就要退化了,呵呵
顺便问问:ObjectSpace怎么了?
昨天有位陈浩给我发了封信,讨论了关于installshield mutiplatform的问题,不过我回复Mail一直有问题,难道Sina不能给Yahoo发Mail?所以就在随笔里贴出来了。
Mail:
Sender: 陈浩
Email: haoch@yahoo.com.cn
用installshield mutiplatform制作的安装程序,在pc机器上安装正常,
但是在服务器上安装,整个程序的的安装界面都不能出现,只是准备过程在屏幕上一闪就没了,其中PC机器上P4,赛扬全有,服务器是4个至强CPU,请问这是什么原因呢?
如果陈浩能看到那么就在反馈中讨论一下吧。
我感觉mutiplatform不如InstallAnywhere,不过两者都不是太稳定。Debug的安难度比MSI或者InstallScript的项目难。
Mail中说的不太详细,需要安装的程序是Java系统吧?另外你的PC和服务器的操作系统分别是什么?
跨平台安装就是针对不同的平台都生成一个安装文件,呵呵
一个商业软件的安装程序都有一个序列号输入、验证的界面,有不少朋友也遇到这样的问题,其实在IS X就自带了例子项目,InstallShield X\Samples\Example Custom Password Dialog\下即为此项目(从IS 7就有),他里边验证序列号的路经比较简单,是由字符加数字方式组成序列号,而通过将数字进行简单的运算来验证序列号,虽然简单,但是也够了,毕竟就没有万无一失的防盗版方式(如果你的程序如Windows般版被盗版,那么你也是一个绝顶牛的大虾了,反而应该高兴才对,呵呵)。如果你想更复杂一些,就自己做一个有验证序列号算法的DLL(符合Com),那么就可以将此DLL加到IS中来,验证方法也就可以在Installscript中调用了。
User Interface
此视图中可以管理所有的用户界面。Dialogs中包括系统中所有的对话框,在这里我们可以简单的更改每一个对话框中的对象的行为,更改对话框中的文字和图片,如果你在Project properties中的安装语言项目中选择了多种语言,那么每种语言对应的对话框都会列出来,就可以分别修改了。
在此我们也可以导入、导出对话框。大家要注意有一个LicenseAgreement对话框,即许可证协议对话框,在这里我们需要选择一个.rtf文件,在安装过程中rtf文件中的内容就会显示在协议文本框中。所有的正规的安装程序都需要设置此项(大家要好好的写你的License啊,呵呵)。
IS支持定制用户界面,不过在Web项目中并不支持此项,如果是安装一个WinForm程序则可以使用其它的Skin来美化你的安装程序。
Media
在此视图中定义你的安装程序的文件组织等信息。我都是使用Release Wizard,所以没用过此项目,还是Release Wizard比较方便直观。
Additional Tools
附加工具视图。
Dependency Scanners
此工具可以扫描安装项目中的执行文件和库文件,这样可以发现你的程序都需要哪些系统环境和Dll支持,这样可以保证你的程序在部署到客户计算机时尽量包括所需要的各种库,而不是要客户再去查找、安装。
MSI Debugger
MSI安装项目的调试功能,在这里你可以对于每一个自定义功能和对话框的执行进行调试。InstallScript安装项目没有此功能。
Direct Editor
在此编辑所有的MSI Tables。我们在前边设置的各种信息,如产品信息、快捷方式等等内容全部都存在MSI Tables中。
这一部分应该属于高级功能,它不像上面几部分一样只要你清楚功能就可以很方便的完成设置。这一部分主要包括使用InstallScript编程实现所需功能和自定义某些安装设置、流程和一些特殊操作。
InstallScript:这是Installshield的脚本语言,利用InstallScript你可以完成很多的操作,从文件操作、Xml操作、注册表操作等等。InstallScript的语法与C++类似,并且提供了大量的函数,可以比较简单的完成程序编写。
编写InstallScript是从新建Script文件(.rul)开始的,我们在Script文件中建立的每一个函数都会在Custom Actions下备选,这样我们就可以很好的控制我们编写InstallScript函数的运行顺序了。
我的一小段代码,作用是写入安装时的目标机时间,作为简单的试用版时间控制用的,也没有加密,呵呵,比较粗糙:
#include "ifx.h"
export prototype regDateHWND);
function regDate(hMSI)
STRING strDate,svResult;
NUMBER nvResult;
begin
if(CreateRegistrySet ( "CompanyName" )<0) then
//MessageBox("un reg set CompanyName",1);
else
endif;
if (GetSystemInfo (DATE, nvResult, svResult) < 0) then
else
strDate = svResult;
endif;
RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );
if(RegDBKeyExist ( "SOFTWARE\\CompanyName") < 0) then
RegDBSetKeyValueEx ( "SOFTWARE\\CompanyName" , "RegDate" , REGDB_STRING , strDate , 50 );
else
endif;
end;
Custom Actions:
此功能主要是将自己定制的各种功能加入Install的安装过程中,定制的功能可以是在上面编写的Installscript函数,也可以是独立运行的EXE、DLL中的某个函数、VBScript,JScript等等,可以直接添加或者使用向导(Custom Actions Wizard)添加。
添加过程中或添加结束后有很多的属性可以设置,
这些属性包括自定义功能运行的方式(是否等待运行完成自定义功能再向下执行)、运行的条件、运行失败的操作、在各个安装序列中的安装次序等,各部分请大家对照属性设置表和使用帮助来详细了解。
我在IS 9是自己写了一个WinFrom来执行Sql Server数据库安装、License输入、修改Web.Config中数据库连接串和License等工作,我添加了一个指向DataBaseSetup.exe的Custom Action,让他在结束安装前调用,这样在所有的Web程序安装结束后我就调用此EXE进行配置,配置完成退出此程序就结束整个安装。
Sequences:
此功能为设置全部动作的安装顺序,可设置的元素包括:用户界面、标准的安装动作、自定义的功能等,你可以通过Move Up、Move Down或者更改Sequence Number来调整安装顺序或者直接将某些Sequence删除。你也可以在这里加入一些自定义功能或者系统功能。
如果你需要你的安装程序完成后重新启动目标机,那么只需在Sequence的最后插入一个IS的标准工作(Standard Action)-- ScheduleReboot,此动作的功能是在安装结束时提示用户重新启动计算机。
Support Files
使用此功能,安装程序制作人员可以添加一些只有在安装过程中才会使用的文件,比如语言文件、Splash的位图文件等等。
System Searchs
在安装过程中搜索目标机系统中的文件、文件夹路经、注册表项目并以此决定系统文件夹(IIS)的位置、系统的版本等信息来确定安装中所需的某些参数。
Property Manager
在此视图中编辑属性表,很多属性都是上面的各个视图中出现的。