Apache的许多外挂功能是通过模块实现的,比如php、subversion等,安装这些功能时就需要向Apache中添加模块。看似很简单,向 httpd.conf 中添加下面这一行(以php为例):
LoadModule php5_module "php-5.1.2/php5apache2.dll"
但是试图重新启动Apache时却往往不能成功。在事件查看器中可以看到,Apache无法找到指定的模块(php-5.1.2/php5apache2.dll)。可是明明这个文件好好地在那里,为什么?
原来是系统找不到该模块所需的 dll 文件,而造成启动失败,Apache在报告错误时简单地报告为模块找不到。
那么如何判断该模块需要哪些dll才能执行?一般来说,模块所需的dll都饱含在该模块的软件包中,例如上述 php5apache2.dll 所需的 php5ts.dll 就包含在php的发行包中,并与php5apache2.dll位于同一目录下。如果你安装了 Microsoft Visual C++ 6.0,其中附带的一个工具Dependency Walker可以精确地告诉你模块需要什么dll。用Dependency Walker打开php5apache2.dll,可以看到该模块需要以下的dll:php5ts.dll,libhttpd.dll,libapr.dll,libaprutil.dll,msvcrt.dll,kernel32.dll。其中 msvcrt.dll 和 kernel32.dll 是系统文件,libxxx.dll 是 apache 自带的 dll 文件。
确定了模块需要哪些dll之后,下一步就是让系统找到这些dll。Apache启动时,它会在Apache.exe所在目录(一般是C:\Program Files\Apache Group\Apache2\bin)和系统的 %PATH% 变量中寻找dll。所以最简单的方法就是将模块所需的 dll 文件复制到 Apache.exe 所在目录下,或者复制到 C:\Windows\system32 下。这样Apache就可以正常加载该模块了。
另外一个方法就是修改%PATH%环境变量,使之包含模块所需dll所在的目录。在上面的例子里,假设php安装在 C:\php 下,那么向 %PATH% 中添加 C:\php,Apache即可正常加载php模块了。但是,如果你的Apache是通过系统服务启动的话,那么修改完环境变量之后必须重新启动计算机才能正常启动Apache服务(参考:http://tech.idv2.com/2006/04/06/windows-env-var-vs-reboot/)。
经常看到一些软件的安装说明上写着,修改Windows的环境变量,然后重新启动计算机。这让人不禁产生疑问,修改环境变量之后真的要重启吗?
其实只要理解了环境变量的原理就可以做出正确的判断。环境变量是一些系统变量,这些变量对运行的任意一个程序都有效。最简单的确认方法就是 cmd.exe 程序。单击“开始”->“运行”,然后输入 cmd,回车,在启动的命令行窗口中输入 set,之后就可以看到一大堆各种各样的环境变量显示在屏幕上。而修改环境变量则是通过“控制面板”->“系统”->“高级”->“环境变量”对话框进行的。
这里要理解的是,一个程序启动时,环境变量被复制到该程序所在的环境中,在该程序执行过程中不会被除该程序以外的其他程序所改变。也就是说,假设我们启动了一个cmd程序,然后通过控制面板修改了环境变量设置,但是已经启动了的cmd所拥有的环境变量并不会被改变。如果我们在修改环境变量之后启动cmd程序,则该程序将拥有新的环境变量。
那么结论就很明显了:修改环境变量之后,如果受影响的是应用程序,那么只要简单地重新启动此应用程序,环境变量的修改就会反映到该程序中,而不必重新启动计算机;但是,如果受影响的是系统服务,就必须重新启动才能将环境变量的修改反映到系统服务中(因为没有办法在不重启计算机的情况下重新启动系统服务管理器)。
本人使用的一台笔记本曾经由于安装软件不当而中木马,一般的清除方法均对其无效,后判明原来是木马驻留在Windows的Socket协议栈中。下面是清除方法。
本文中所提到的命令及其选项的使用方法请查阅相关资料。
阅读全文 »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,片刻之后则提示修复完毕。然后重新启动计算机即可。
MinGW: Minimalist GNU for Windows,是GNU开发环境在Windows下的一个移植。而MSYS则是与MinGW配套的一个shell环境以及相关的工具程序。
阅读全文 »环境: 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
1. 安装Apache ( http://httpd.apache.org) )和 ActiveState Perl (http://www.activestate.com/ )。
2. 安装mod_perl。
ppm install http://theoryx5.uwinnipeg.ca/ppms/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>
SetHandler perl-script
PerlHandler ModPerl::PerlRun
Options +ExecCGI
</Files>
4. 重新启动Apache。
2009/9/27更新
原来的安装地址http://theoryx5.uwinnipeg.ca/ppmpackages/mod_perl.ppd已经变成了ActivePerl 6.xx的地址,
而本文使用的是ActivePerl 5.xx,地址修改为http://theoryx5.uwinnipeg.ca/ppms/mod_perl.ppd。
按:本文主要针对预装 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下面的目录中保存了各个软件所用的图标,最好不要移动。
今天被 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被删除所以不能维护了呢?
阅读全文 »猜测一下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 服务,得到该安装文件的原位置,再试图到原位置去寻找。如果再找不到则提示安装失败。
