月度归档:2005年10月

在人员离职时如何检查SourceSafe中是否还有CheckOut的项目

虽然平时一直要求在工作时不要把文件都CheckOut出来,而是只CheckOut所需要修改的文件,并且要在修改后及时CheckIn。但有些开发人员仍不能很好执行。因此在人员离职时常常在SourceSafe下留下很多仍然CheckOut的文件,同时也不知道本地是否有已经修改的新版本。

因此,在离职时需要检查一下是否有其仍然CHECKOUT的内容。先使用SOURCESAFE Administrator来检查一下此用户在SourceSafe 中有CheckOut权限的目录,然后对每个目录分别使用: <server>\vss\win32\ss status $/proj -R -U -yuser,password

此命令会记录所有被CheckOut的文件,$/proj表示从具体的某个proj目录开始, -R 表示递归检查子目录。-U 表示只显示指定用户CheckOut的文件,user和password需要替换成离职人员的信息。当然你也可以从$/开始检查所有的目录,但对于没有权限的目录会提示”You do not have access rights to $/xxxx”.

如果有显示信息,则必须要求其将所有文件都CheckIn或者Undo CheckOut,最好先比较所有文件的差异,确认后再操作。

WAP中如何得到手机信息?

我们可以在ASP中使用下面的句子来检查WAP浏览器发出的所有HTTP头。


<% Response.Write "
AllHttp:”
Response.Write Request.ServerVariables(“ALL_HTTP”)
Response.Write “
AllRaw:”
Response.Write Request.ServerVariables(“ALL_RAW”)
%>

ALL_HTTP和ALL_RAWQ的区别在于ALL_HTTP给所有的变量加上了HTTP_前缀,并且将’-‘换成了’_’ 。

在LG手机(910,950,8188)试验都通过HTTP_X_IMIS 来返回手机的IMIS信息。

网上有说用下述变量来检查的:”HTTP_X_NETWORK_INFO”,”HTTP_X_UP_CALLING_LINE_ID”,”HTTP_X_UP_SUBNO”,”DEVICEID”,但在LG手机上都不行。也许在中国移动的手机上可以?

另外,从上面的返回中也可以看到ACCEPT哪些Content-Type。LG910/950上支持了audio/vnd-qcelp, 因此我们的QCP文件是可以试听的,也试验成功了。另外还支持smaf, pmd, midi等,但没有试验。但LG8188上就不可以。这就是WAP1.0和2.0的一个重要区别吧。

WAP图铃下载的试验

虽然现在要做的WAP版炫铃快递不需要下载图铃,但还是查了查,试了试WAP中下载图铃的方法,结果发现:

1. 有些WAP网站直接写图铃的URL。但我试验结果是只下载到本地,显示一个包含此对象的页面,并不能直接显示下载界面和去设置铃声,也不会在“下载文件夹”中出现。而且在LG910手机上,只有MMF可以,其它如MIDI, MP3显示”406:不接受的格式”, QCP, PMD显示”404:找不到文件”。

2. 有些网站中提到用”uplink:download”语法,但我试验结果提示“URL错误”。

查询到下面的页面,可能说出了问题所在:http://club.phpe.net/index.php?act=ST&f=15&t=5188&s=

做了一个月,也总算有点收获,在这里和大家分享一下吧!
先说WAP图铃下载,联通的有一个download func,有详细的文档,
移动的就直接写出URL!

Download fun(下载类服务)
对于下载类业务,CP/SP需要向中国联通申请该类服务,并提交下载内容服务器的主域名或IP地址给中国联通,由中国联通审核能否向CP/SP所提供的服务的主域或IP地址提供下载类服务权限,并在Openwave download fun server中进行相关控制配置。在填写Download的地址中的source时要后跟下载目标的实际URL。
例如:

TestPic1

有关Download Fun更多内容请参考Openwave Download Fun公开技术规范,或者访问:http://www.openwave.com获取更多信息。

因为我是在联通手机上试的,同时又没有申请此类业务,所以会有上面的试验结果。

如何增加数字签名

首先要有工具包,包括以下几个软件:
makecert.exe 制作cer格式的证书,即X.509证书,同时可以创建私钥
cert2spc.exe 将cer格式证书转换成spc格式证书,即PKCS #7证书
signcode.exe 将证书签署到ocx上去
chktrust.exe 检查签署证书后的ocx是否正确
还有一个certmgr.exe,是管理证书用的。可以从这里面导出root.cer来,
网上很多文章写到这个证书,但是在VC的安装盘中却找不到。其实,没
有也没关系的。这几个软件可以从VC的安装盘中找到。

下面是具体的步骤:
1、创建一个自己的证书文件:
makecert /sv “Record.PVK” /n “CN=公司名称,E=email,O=作者” dream.cer
这里,Record.PVK表示新创建的私人密钥保存文件名
DreamCaptial是你想显示的公司名
dream.cer是你创建最后的证书文件名
这些根据你自己的要求填写,最后得到Record.PVK和dream.cer两个文件。
其中,运行过程中需要输入私人密钥的保护密码,一定要输入一致,不要
出错。

2、转换cer格式为spc格式(可以省略)
cert2spc dream.cer dream.spc
得到dream.spc文件。

3、给ocx进行签名
运行signcode,命令行的我没有试验通过,我是通过界面实现的。
signcode运行后会出现数字签名向导,首先选择你要签名的ocx,
下一步后会出现签名选项,一种是典型,一种是自定义。选择自定义,
这样才能从文件选择证书,选择前面制作的dream.spc,再下一步是
选择私钥文件,选择Record.PVK,输入私人密钥的保护密码,选择散
列算法,一般用md5就可以了,下一步是选择其他证书,直接下一步,
填写一下这个控件的声明,用户用ie浏览的时候,会弹出证书说明,
再下一步是加盖时间戳,我不会,直接下一步就完成了。

4、用chktrust检查是否正确
chktrust -v RecordProj.ocx

就这样,得到了一个测试证书,恩,虽然只是一个测试证书,但至
少保证这个ocx在ie浏览的时候能够弹出来一个窗口,问你是否安装,
而不是直接禁止了。

以上来自 http://www.edown8.com/info/20051732258.html

——————————————————————-
如果用于cab的数字签名,步骤是一样的,但是cab制作时必需为其保留空间。例如:

cabarc -s 6144 N jkaraok.cab jkaraok.ocx jkaraok.inf

Update(2005-10-14):

1. 以上工具在VC 6.0中没有, Visual Studio .NET 2003中的“\Common7\Tools\Bin”目录下的工具可以按照上文直接使用。

2. 有些文档里的描述的命令行工具名称一样,但用法和上文不一样,但好像是老的SDK中的工具,是针对IE 3.2的,而新的工具是针对IE 4.0的。

3. 使用测试证书的时候还必需用“SetReg 1 true”将测试证书的信任打开,否则测试证书仍然做为不可信任的证书。此工具同样在上述目录中。

OCX控件在网页使用时Presistence Property的使用

在网页中使用OCX时,可以使用PARAM,这时候在初始化时这些OCX的属性就会被设置, 如

<OBJECT ID=”abcd” WIDTH=500 HEIGHT=500
CLASSID=”CLSID:7B222D80-14C1-44CD-ABBB-45CDEE0E5E8E”
CODEBASE=”http://chenming/jkaraok.cab#Version=1,0,0,001″>
<PARAM NAME=”LyricFontName” VALUE=”隶书”>
<PARAM NAME=”LyricFontSize” VALUE=”18″>
<PARAM NAME=”LyricTextColor” VALUE=”255″>
<PARAM NAME=”LyricCurTextColor” VALUE=”16776960″>
<PARAM NAME=”WavForeColor” VALUE=”65280″>
</OBJECT>

如果这些属性的使用还要通过别的一些处理才能起到作用,那么就需要在PX_* 函数交换过数据后进行实际的一些处理工作:

void CJKaraOKCtrl::DoPropExchange(CPropExchange* pPX)
{
ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
COleControl::DoPropExchange(pPX);

// TODO: Call PX_ functions for each persistent custom property.
PX_Color(pPX, “LyricBackColor”, m_lyricBackColor, (DWORD)RGB(178, 198, 218));
PX_Short(pPX, “LyricLineHeight”, m_lyricLineHeight, 20);
PX_String(pPX, “LyricFontName”, m_lyricFontName, “宋体”);
……

if (pPX->IsLoading())
{
// 具体的一些处理工作
……
}

}

CPPUNIT自动在编译器输出窗口显示错误信息的方法

关键环节,是在Project Settings的Post-build step处加上一个自定义命令,当然这是针对VC IDE而言的:

$(TargetPath)

$(TargetPath)代表编译后生成的exe文件。有了这项设置,IDE的compiler就会在编译结束之后,即刻运行本测试程序。同时输出结果会在编译器窗口输出。

在主函数main()中需要加入:

// Change the default outputter to a compiler error format outputter
runner.setOutputter( new CompilerOutputter( &runner.result(), std::cerr ) );
(相应还需要#include <cppunit/CompilerOutputter.h> )

这样做的目的,是使输出格式和编译器的输出兼容,这样在编译器输出窗口就可以双击错误文件名和行号的那一行直接定位到错误行了。

另外,对于在外面执行的情况,可以在Project Settings的Debug中设置执行目录(因为我希望测试数据在另外一个目录,而程序在这个目录下执行)。而使用Post-build的方法不能指定执行的当前目录(谁知道?),现在我的方法是在main()中直接用SetCurrentDirectory() 进行设置。

如何在网页中激活FinalBuilder?

现在在我们公司rdserver的“每日构建”页面下增加了一个“立即构建”的按钮,按此按钮可以直接激活在rdserver上的FinalBuilder,自动对工程项目进行构建,而不需要等到半夜的重编,适应一些需要立即出结果的情况。由于重编需要比较长时间,因此在激活后就可以不管它,过一阵子(现在大概10分钟左右)再重新刷新。部分人员也可以通过Email得到构建完成的通知。

这里解释后台的一些情况。关于在ASP中如何在后台调用一个应用程序,高占勇提供了一个方法 “WScript.Shell”对象, 以及相应的Run(strCommand, [intWindowStyle], [bWaitOnReturn]) 方法:

Dim oShell
Set oShell = WScript.CreateObject (“WSCript.shell”)
oShell.run “cmd /K CD C:\ & Dir”
Set oShell = Nothing

我现在用的是ASP .NET with C#, 因此直接使用了Process组件:

private void Button1_Click(object sender, System.EventArgs e)
{
string exe = @”””C:\Program Files\FinalBuilder2\finalbuilder2.exe”””;
string param= @”/n /r /e /f “”D:\jtts-builder\jtts.fbz2″””;
Process.Start(exe, param);

Label2.Text = “每日构建已激活!\n请等待邮件通知或10分钟后重新刷新此页面!”;
}

exe为执行程序名,param为参数。Start是一个静态方法,因此不需要实例化一个Process组件。

FinalBuilder2的命令行参数: /n 不显示初始窗口, /r 自动执行后面所跟脚本, /e 执行完毕自动退出, /f 忽略错误。

到这一步都很简单,但是实际在运行时FinalBuilder并不能运行下去。主要原因在于jTTS4 Daily Builder的FinalBuilder脚本中使用了SourceSafe来访问我们的代码库,而VSS Server(\\myserver)上的vss共享目录是有用户访问权限限制的。而在Windows Server 2003, IIS6中,缺省时FinalBuilder是用NETWORK_SERVICE用户执行的,因而造成错误。

解决方法是让FinalBuilder以其它具有vss目录访问权限的用户执行,具体是通过修改IIS中DailyBuilder虚拟目录的”应用程序池”(Application Pool)来实现的。

下面的内容摘自:http://doc.4kiki.net/content/1/23/200505/01/d271a7fc84170273.html

Enabling ASP.NET to run as another user on Windows XP Professional
As an Administrator, edit the attributes of the file”%INSTALLROOT%\Config\machine.config” ‘on the processModel tag, as shown:

<processModel
enable=”true”
userName=”DOMAIN\username”
password=”MyPswd2″

/ >

Note %INSTALLROOT% is of the form D:\WINDOWS\Microsoft.NET\Framework\v1.0.3705
Enabling ASP.NET to run as another user on Windows Server 2003
With Windows Server 2003 and IIS 6, there is a new feature named application pools. Each pool can be configured to run as a different user, provided that user has membership in the IIS_WPG group. Virtual roots can be added to an application pool, and the debugger will then be able to attach to it if the pool is running as the same user that launched the debugger. This mechanism provides an easy way to set up an alternate execution environment, safely protect user credentials, and set up additional virtual roots.

Adding and Configuring an Application Pool
Run the Management Console compmgmt.msc as an administrative user.
Expand the Services and Applications node to display the Internet Information Services, and Application Pools nodes.
Right-click the Application Pools node, choose New, and then choose Application Pool.
Type the name for the Application Pool and click OK.
Right-click on the new Application Pool and choose Properties.
Under the Identity tab, choose the Configurable option.
In the corresponding boxes, enter the User name and Password that you will be running the debugger with and click OK.
Note This account must be a member of the IIS_WPG group and have the access permissions listed above in order to run ASP.NET applications.
Setting a Virtual Root to run in an Application Pool
Run the Management Console compmgmt.msc as an administrative user
Expand the Services and Applications node to display the Internet Information Services, Web Sites, and Default Web Site nodes.
Expand the Default Web Sites node to display all of the virtual roots available.
Right-click on the virtual root to configure and choose Properties.
On the Virtual Directory tab, change the Application Pool drop-down to select the application pool running with the appropriate user identity and click OK.

努力学说话

正在努力学说话,可老是说不出“爸爸”,”妈妈“,老是”大大大“的,妈妈说她们内蒙喊爸就是”大“,爸爸说”这也遗传你们那里了呀?“,呵呵
?
周六去了趟钓鱼台国宾馆,里面挺大也挺漂亮的

好久没有汇报了

我现在爬得已经很利索了,这两天老是希望自己撑着站起来,也差不多可以了。已经长到7.85公斤了,这个月长得还可以。听到说“爸爸”,“妈妈”,“灯”什么的反应还不够,还要锻炼

昨天晚上看到爸爸回家笑得不得了,不过也可能是把家里平时不开的灯给打开了。晚上又抓着妈妈的脸乱啃,爸爸说我象个“小杀手”,你不知道我喜欢谁,就会啃谁吗?什么艾德熊,小企鹅,米老鼠的,都被我啃遍了了…