2006-03
30

Windows XP/Linux双启动的机器一般都使用grub作为引导程序。如果不小心在Windows中删除了Linux分区,grub就会因为找不到配置文件而造成无法启动。此时有两个解决办法。

1. 手动启动Windows

系统启动后将进入grub的控制台,这时输入以下命令:

rootnoverify (hd0,0)
chainloader +1
boot

即可成功启动进入Windows。参数(hd0,0)表示Windows安装在第一块硬盘的第一个分区,即C盘。但是使用此方法,每次重新启动机器时都要输入上述命令,因此只能作为应急手段。

2. 使用Windows故障恢复控制台进行修复

插入Windows XP安装光盘,从光盘启动,之后选择 R 键启动故障恢复控制台。选择要登录的Windows(一般是 1),输入密码。然后输入以下命令:

fixmbr

系统会提示说“可能会损坏分区表”,不要理会,回答Y,片刻之后则提示修复完毕。然后重新启动计算机即可。



2006-03
29

0. 前言

所谓IE地址栏表达式,就是在IE的地址栏中输入 javascript:<代码>,执行某些功能,来动态改变原有页面的参数以达到某些目的,例如开放被禁止的按钮、显示原本隐藏的图片等等。本文将就IE地址栏的使用方法做一个详细的说明。

阅读全文 »

2006-03
27

MinGW: Minimalist GNU for Windows,是GNU开发环境在Windows下的一个移植。而MSYS则是与MinGW配套的一个shell环境以及相关的工具程序。

阅读全文 »

2006-03
27

环境: VC++, ActivePerl

1. 下载openssl源代码: http://www.openssl.org/

2. 配置

D:\openssl-0.9.8a>perl Configure VC-WIN32
D:\openssl-0.9.8a>ms\do_ms.bat

运行时会出现找不到%OSVERSION%环境变量的错误,不必理会。

3. 编译

(ntdll.mak编译成动态dll。如需要静态dll则使用nt.mak)

D:\openssl-0.9.8a>"C:\Program Files\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT"
Setting environment for using Microsoft Visual C++ tools.
D:\openssl-0.9.8a>nmake -f ms\ntdll.mak

4. 测试

D:\openssl-0.9.8a>cd out32dll
D:\openssl-0.9.8a\out32dll>..\ms\test

5. 安装

D:\openssl-0.9.8a>md c:\lib\openssl
D:\openssl-0.9.8a>md c:\lib\openssl\bin
D:\openssl-0.9.8a>md c:\lib\openssl\lib
D:\openssl-0.9.8a>md c:\lib\openssl\include
D:\openssl-0.9.8a>md c:\lib\openssl\include\openssl
D:\openssl-0.9.8a>copy /b inc32\openssl\* c:\lib\openssl\lib
D:\openssl-0.9.8a>copy /b out32dll\ssleay32.lib c:\lib\openssl\lib
D:\openssl-0.9.8a>copy /b out32dll\libeay32.lib c:\lib\openssl\lib
D:\openssl-0.9.8a>copy /b out32dll\ssleay32.dll c:\lib\openssl\bin
D:\openssl-0.9.8a>copy /b out32dll\libeay32.dll c:\lib\openssl\bin
D:\openssl-0.9.8a>copy /b out32dll\openssl.exe c:\lib\openssl\bin
D:\openssl-0.9.8a>copy README c:\lib\openssl
D:\openssl-0.9.8a>copy LICENSE c:\lib\openssl


2006-03
27

DOM对象event仅在事件发生的期间内存在。因此下面这种写法是错误的:

<a href="javascript:alert(window.event.x)">

而应当写成

<a href="#" onclick="alert(window.event.x); return false">


2006-03
27

通常,如果对HTML元素指定了 position: absolute,则可以通过 left、top、pixelLeft等 属性获取该元素的位置和大小。但是不指定 position:absolute 的情况下则不能使用该方法。

幸运的是如果我们想知道的是文本框的位置,则可以使用 textRange 对象来获取。

如果我们有

<input type="text" id="inputbox">

则可以通过以下代码获取其位置:

var inputbox = document.getElementById('inputbox');
var tr = inputbox.createTextRange();
top = tr.boundingTop;
left = tr.boundingLeft;
height = tr.boundingHeight;


2006-03
25

1. 安装Apache ( http://httpd.apache.org) )和 ActiveState Perl (http://www.activestate.com/ )。

2. 安装mod_perl。

ppm install http://theoryx5.uwinnipeg.ca/ppmpackages/mod_perl.ppd

安装完毕之后会提示输入Apache的路径,输入类似于 D:/Apache2/modules。

3. 配置mod_perl。修改httpd.conf,增加以下几行:

LoadFile "C:/Perl/bin/perl58.dll"
LoadModule perl_module modules/mod_perl.so

<Files *.cgi>
    SetHeader perl-script
    PerlHandler ModPerl::PerlRun
    Options +ExecCGI
</Files>

4. 重新启动Apache。



2006-03
24

按:本文主要针对预装 Windows XP 的笔记本电脑。台式机硬盘都比较大,一般没有 C盘减肥的必要,不过也可以借鉴本文的做法。

1. 准备备份空间

由于C盘减肥并不是简单的文件删除,有许多不常用但却不能删除的重要文件需要备份到其他地方,所以应当首先准备出一个2-3G大小的备份空间。如果你的笔记本有恢复光盘,那么可以将笔记本硬盘最后面的恢复分区删除,就可以得到>2G的空间。

2. 修改系统配置减肥

禁用休眠功能可以节约数百 M 的C盘空间(与内存大小相同)。然后将虚拟内存移动到备份分区可以节约 500M - 1G 左右的空间。禁用各个硬盘的系统还原功能可以节约 100M 左右。最后将C盘的回收站所占的百分比减小。

3. 删除不必要的文件

不必要的文件包括:%WinDir%/Help 下的所有帮助文件,约 100M;%WinDir% 下的 $NtUninstallxxxx$ 等为系统补丁的备份文件,一般不必保留。至于 %WinDir%/Font下的字体文件,没用的字体就删除掉,因人而定了。最后再清理一下 Temp和 IE 缓存等。

4. 移动不常用的文件

%WinDir%下可能会包括一个 i386 的文件夹,该文件夹为Windows XP的安装文件。有了它,在添加删除系统功能时就不会提示插入系统盘了。但是这些文件不常用,应当将其移动到备份分区。以后提示插入系统盘时,选择备份分区即可。另外 %WinDir%/Installer 下为 Windows Installer安装文件的备份,可以将其全部移动到备份分区,添加删除程序时再将其移回即可。但要注意%WinDir/Installer下面的目录中保存了各个软件所用的图标,最好不要移动。



2006-03
24

今天被 Windows Installer 搞死了。

事情是这样的。今天本来是要安装Office的补丁 KB905756,据说是修复 Excel 2003 漏洞的。下载补丁文件之后进行安装,片刻之后提示安装失败。我当时没怎么在意,因为正好在补丁站点上看到了安装失败的解决方式,就是进行一下Office 2003的自动修复,再重新进行安装。于是打开控制面板、添加删除程序,单击Office 2003选择修复,然后等待。片刻之后系统给出提示:

この修正プログラム パッケージを開くことができませんでした。
修正プログラム パッケージが存在し、アクセスできることを確認してください。
またはアプリケーション ベンダに問い合わせ、
Windows インストーラの修正プログラム パッケージが
有効であることを確認してください。

大意就是说,找不到补丁的文件,请确认该补丁是否存在。然后我又试图将Office2003 删除,结果得到了同样的提示,删除失败。我才意识到事情的严重性,估计所有的 Windows Installer 安装的程序都不能维护了吧。突然想起,前一阵子为了增加C盘剩余空间,曾经删除了C:\Windows\Installer 下面的全部文件。我知道这个目录下面保存的是Windows Installer的安装Cache,安装文件都以 xxxxxx.msi xxxxxx.msp (xxxxxx为16进制数字)的形式保存在这里,会不会是因为Cache被删除所以不能维护了呢?

阅读全文 »

2006-03
23

猜测一下Windows Installer的安装过程。注意:仅仅是根据本人经验猜测而成,并不一定正确,而且一定不完整。

1. 应用程序的安装。

首先将安装文件 abc.msi 复制到 %WinDir%/Installer 下,文件名改名为 xxxxxx.msi ,其中 xxxxxxx 为16进制数。然后将源文件 abc.msi 所在位置保存到一个名为SOURCEMGMT 的服务中。然后取得该软件的软件包 id 并注册。最后进行软件安装。

2. 打补丁。

首先与程序安装过程相同,将补丁文件 def.msp 备份到 %WinDir%/Installer 下面,并进行相应的注册等工作。然后检查该补丁是否与已安装的补丁冲突,如没有冲突则直接安装,否则利用以前在%WinDir%/Installer下备份的安装文件将冲突的补丁进行回滚并重新安装。例如,软件 abc.msi 打了两个补丁 def1.msp 和 def3.msp,现在要安装 def2.msp,检测出 def2.msp应当在 def3.msp之前进行安装,则自动卸载 def3.msp,然后安装 def2.msp,再安装 def3.msp。因为以前在 %WinDir%/Installer 下备份了 def3.msp,所以这里可以利用以前的备份进行 def3.msp的删除和安装。

3. 卸载

按照顺序依次卸载软件的补丁和软件本身。

4. 找不到备份时的处理

如果在进行软件包维护时,%WinDir%/Installer 下找不到所需的安装文件备份,则访问 SOURCEMGMT 服务,得到该安装文件的原位置,再试图到原位置去寻找。如果再找不到则提示安装失败。