行云无鸣

2012-01-01

PATH路径输出变为”C:\Windows\system32\NV;.;”

Filed under: 乱语 — 标签:, , , , — hellyguo @ 21:32

我的计算机是Lenovo的T420,有两块显卡:Intel HD和NV 4200。刚装好系统时,由于我顺手禁用了NV的几个服务。所以,一直采用的显卡是Intel HD。
前几天,我打算玩游戏,打开了NV的服务后,噩梦开始了。CMD下的PATH输出正常,但在其他程序中,PATH输出就不正常,输出”PATH=C:\Windows\system32\NV;.;”。
让我们来看下这个文件夹下有什么:

2011.12.30 09:35 .
2011.12.30 09:35 ..
2011.04.01 22:00 15,039,080 ig4icd32.dll
2011.04.01 22:00 644,712 igd10umd32.dll
2011.04.01 22:00 644,712 igdumdx32.dll

ig4icd32.dll/igd10umd32.dll/igdumdx32.dll这几个文件,在Intel HD的驱动中也存在。猜想是,NV为实现双显卡切换,重写了与Intel HD驱动同名的DLL,来调用NV自身的DLL。
为此目的,NV必须将这些DLL库放在Intel HD的DLL库前优先加载。最简单的方法是将这些DLL放在PATH查询路径的最前面,即将”C:\Windows\system32\NV”放在PATH变量的最前面。
而实现此功能的程序,存在BUG,没有实现将”C:\Windows\system32\NV”放于PATH变量最前面,而是实现了将此路径叠加当前路径,覆盖PATH。也就是”PATH=C:\Windows\system32\NV;.;”。
于是,我再次禁用了NV的服务。重启后,PATH就正常了。

2011-10-01

Windows版本DB2登录时报“SQL30082N USERID DISABLED or RESTRICTED”

Filed under: 乱语 — 标签:, , — hellyguo @ 20:50

Windows版本的db2,通过db2cmd登录时报:SQL30082N USERID DISABLED or RESTRICTED
在我这里出现此问题的原因是,我在组策略中封闭了db2admin账户的网络访问权(计算机配置->Windows 设置->安全设置->本地策略->用户权利指派,“拒绝从网络访问这台计算机”中添加了db2admin)。
删除即可。

2011-08-15

打造一个快捷打开应用程序的页面

Filed under: 乱语 — 标签:, , , , — hellyguo @ 22:05

一直希望在Windows下快捷地运行程序,可惜始终找不到合适的快速启动软件来管理我如许多的应用。用过AltRun,可惜总不顺眼。还是坚持使用HoeKey。但软件多了,HoeKey管理热键就越来越多,和其他软件的冲突也越来越多,得不偿失了。为此,HoeKey就只精简地使用打开浏览器(firefox/chrome/ie)/邮件客户端(thunderbird)/TM/CMD几项。其他的程序,就是采用Run(win+r)来打开的。

今天突发奇想,能否在浏览器上做文章,通过编写一张固定的页面来实现程序的调用。尚幸,在IE/Firefox下轻松实现了。

  1. 我的程序,常用的都放在D:\GreenSoft下,通过TM的Alt+F7,查找出所有其下的Exe文件,打开为列表
  2. TM下,Ctrl+a全选,Ctrl+3拷贝全路径
  3. 将记录插入VIM中
  4. 通过正则表达式替换将路径替换为html项
    使路径中的斜杠变为双斜杠,在JS中能正常使用
    %s/\\[A-Za-z]/\\\\\1/g
    将路径扩展为html
    %s/\(.*\)/<li><a href="#" onclick="exec('\1')">\1<\/a><\/li>/g
  5. 添加javascript
    for ie

    function exec(strPath){
    try {
    var objShell = new ActiveXObject("wscript.shell");
    objShell.Run(strPath);
    objShell = null;
    }
    catch (e) {
    alert('找不到文件"' + strPath + '"(或它的组件之一)。请确定路径和文件名是否正确.')
    }
    }

    for firefox

    function exec(strPath){
    try {
    netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
    var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
    file.initWithPath(strPath);
    file.launch();
    }
    catch (e) {
    alert(e)
    }
    }
  6. 保存此页面

效果:
在浏览器打开此页面,通过Ctrl+F定位后,点击执行即可
最后,附上最简单的调用cmd的页面代码

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GreenSoft可执行文件列表</title>
</head>
<script type="text/javascript">
function exec_ieonly(strPath){
try {
var objShell = new ActiveXObject("wscript.shell");
objShell.Run(strPath);
objShell = null;
}
catch (e) {
alert('找不到文件"' + strPath + '"(或它的组件之一)。请确定路径和文件名是否正确.')
}
}
function exec(strPath){
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(strPath);
file.launch();
}
catch (e) {
alert(e)
}
}
</script>
<body>
<div>
<ul>
<li>
<a href="#" onclick="exec('C:\\Windows\system32\cmd.exe')">cmd</a>
</li>
...
</ul>
</div>
</body>
</html>

2011-06-01

在Windows下如何制作Linux启动引导U盘(转)

Filed under: 乱语 — 标签:, , , , , — hellyguo @ 21:39

题注:(做过多次,总是忘记,记于笔头,防止忘记)

1.格式化u盘
在Windows下把u盘格式化为fat(2G以下)或fat32(2G以上)格式(强烈推荐使用hp优盘格式化工具)
2.下载并使用syslinux
在这里下载 syslinux
解压后,在win32目录里面使用以下命令来

syslinux.exe -m -a j: (j:为u盘的盘符)

即可在优盘中创建一个可启动的文件(是隐藏的)。
3.在u盘中建立此文件syslinux.cfg(用记事本编辑) ,并在里面加入
default vmlinuz
append initrd=initrd.gz

4.下载
initrd.gz
vmlinuz
下载你所需的debian的iso文件(只需要CD1可以)。
把这3个文件都放到U盘里面
Over

2010-10-03

配置OpenVPN

Filed under: 乱语 — 标签:, , , — hellyguo @ 11:35

一开始是用现成的OpenVPN AS的,在登录WEB UI时,总是报错。后台原因是PAM认证失败。
没法解决这个问题,很郁闷。
最后,采用了源代码自行编译,成功!
流程如下:
1.下载 http://swupdate.openvpn.net/community/releases/openvpn-2.2-beta3.tar.gz
2.编译OpenVPN:“./configure && make && make install”
3.报错,要求提供LZO的库,或是采用“./configure –disable-lzo”
4.在 http://openvpn.net/index.php/open-source/downloads.html 最下方发现LZO库的连接
5.下载 http://www.oberhumer.com/opensource/lzo/download/lzo-2.03.tar.gz
6.编译LZO:“./configure && make && make install”
7.再编译OpenVPN:“./configure && make && make install”
—-以上在Linux服务器上操作
8.下载客户端 http://openvpn.net/release/openvpn-2.1.3-install.exe
9.安装
10.进入到C:\Program Files\OpenVPN\easy-rsa,重命名vars.bat.sample为vars.bat,openssl.cnf.sample为openssl.cnf
11.根据自身情况修订vars.bat
12.cmd进入到C:\Program Files\OpenVPN\easy-rsa
13.按README中步骤,在其下的keys文件夹生成ca.crt,server.crt和一个client.crt,请牢记server和client的密码
14.拷贝ca.crt、client.crt、client.key、client.csr到config文件夹
15.拷贝sample-config下的client.ovpn到config,并根据情况修改文件中的

remote my-server-1 1194

ca ca.crt
cert client.crt
key client.key

注意,CRT及KEY都要和client.ovpn放在一个文件夹下
16.将ca.crt,server.crt,server.key,server.csr,dh1024.pem都传到服务器上
—-以上在Windows客户端上操作
17.拷贝源代码sample-config-files下的三个shell文本和server.conf,和上传的文件放到一起
18.修改server.conf,以匹配ca.crt和server.crt

ca ca.crt
cert client.crt
key client.key

注意,CRT及KEY都要和server.conf放在一个文件夹下
19.修改openvpn-startup.sh,将dir指向目前文件夹,并修改最后部分,只留下一行:

openvpn –cd $dir –daemon –config server.conf

20.执行openvpn-startup.sh
—-以上在Linux服务器上操作
21.双击桌面的“OpenVPN GUI”执行,右键点击托盘区图标,选connect即开始连接,等其变绿,即告成功

2010-07-24

coLinux使用记录

Filed under: 乱语 — 标签:, , , — hellyguo @ 21:06

使用coLinux记录,以作备忘
用的是Debian 5.02 lenny,镜像网上下载,48MB
1.网络设置
eth0作为对外连接网卡,采用slirp
后来由于又安装了VMware,导致eth0无法找到。
查看日志后发现,eth0被替换为eth2,而eth2没有在/etc/network/interfaces定义,导致网络无法访问。
在网上查找后,确认需要指定eth0的MAC地址,再重启,就可以解决了
这里的MAC地址,可以通过查看/etc/udev/rules.d/70-persistent-net.rules得到
eth0=slirp,00:ff:10:1d:64:00
eth1作为连入网卡,采用tuntap
这个win32tap,是coLinux安装后出现的那块网卡,MAC地址也是它的
eth1=tuntap,win32tap,00:FF:A1:DB:51:93
2.磁盘扩容
Windows下
创建10G大小usr分区,2G大小home分区,512M大小swap分区
fsutil file createnew usr.ext3 10737418240
fsutil file createnew home.ext3 2147483648
fsutil file createnew swap.dsk 536870912

注:创建好后,建议马上启用NTFS的压缩功能,可以有效减小磁盘占用。包括原有的磁盘文件,也建议压缩。
对速度的影响基本可以忽略
编辑coLinux配置文件,添加加载这几个分区文件的语句
cobd0="D:\coLinuxHD\Debian.root.ext3"
cobd1="D:\coLinuxHD\usr.ext3"
cobd2="D:\coLinuxHD\home.ext3"

进入coLinux后,为新文件创建文件系统
mkfs.ext3 /dev/cobd1
mkfs.ext3 /dev/cobd2
mkswap /dev/cobd3

激活交换分区
swapon
创建挂载点
cd /mnt
mkdir bd1 bd2

临时挂载
mount -t ext3 /mnt/bd1 /dev/cobd1
mount -t ext3 /mnt/bd2 /dev/cobd2

将文件拷贝到新分区中
cp -ax /usr /mnt/bd1
cp -ax /home /mnt/bd2

编辑fstab,添加
/dev/cobd1 /usr ext3 errors=remount-ro 0 2
/dev/cobd2 /home ext3 errors=remount-ro 0 2

重命名原文件夹,防止后期用磁盘挂载后,凭空占据空间,却无法删除
mv /usr /usr1
mv /home /home1

重启
reboot
确认没有问题后,删除原文件夹和临时挂载点
rm -rf /usr1
rm -rf /home1
rm -rf /mnt/bd1 /mnt/bd2

3.Windows分区加载
其实很简单
在coLinux的配置文件中添加:
cofs0=C:\
cofs1=D:\
cofs2=E:\
cofs3=F:\
cofs4=G:\

在coLinux的/mnt中定义好挂载点后
cd /mnt
mkdir winc wind wine winf wing

编辑fstab
cofs0 /mnt/winc cofs defaults 0 0
cofs1 /mnt/wind cofs defaults 0 0
cofs2 /mnt/wine cofs defaults 0 0
cofs3 /mnt/winf cofs defaults 0 0
cofs4 /mnt/wing cofs defaults 0 0

这里,我犯了经验主义错误
/dev/cofs0 /mnt/winc cofs defaults 0 0
/dev/cofs1 /mnt/wind cofs defaults 0 0
/dev/cofs2 /mnt/wine cofs defaults 0 0
/dev/cofs3 /mnt/winf cofs defaults 0 0
/dev/cofs4 /mnt/wing cofs defaults 0 0

用了/dev/cofsX这种形式,而不是要求的cofsX,结果,陷在这里很久

2010-06-04

Windows2008上运行java产生8小时时差问题原因

Filed under: 乱语 — 标签:, , , , , , — hellyguo @ 14:39

在香港搭建环境时发现Margin系统内部时间与Windows系统时间相差8小时。
初期以为是Windows 2008环境问题,更改注册表后,仍无法解决。
经过本周在测试环境测试重现了此问题。
进一步测试发现,此为1.5.0.07版本不支持高版本Windows导致。
在JDK的更新版本中,已得到修复。
但由于JDK5于2009年10月被sun公司结束支持,故无法再度下载到1.5.0.22版本。
可换用1.6.0.18版本。
在测试环境,JDK6的18子版本测试通过,没有时差问题。

建议将UAT环境上的JDK更新到1.6.0.18。
URL:http://java.sun.com/javase/downloads/widget/jdk6.jsp

同时,建议部门检查其他系统,看是否存在此隐患。(WAS自带JDK为IBM JDK,未涉及。本次主要是涉及SUN JDK和Windows VISTA/Windows 7/Windows Server 2008)

2009-12-15

解压SpringRC3报错

Filed under: 乱语 — 标签:, — hellyguo @ 17:06

先前解压Spring IDE也报错
报错原因很无语:Windows报告,解压出来的总路径长度,大于260个字符了。
神啊,这个长度,也太短了!

2009-12-10

原来Tomcat的webapp启动顺序是依赖File.list()方法的

Filed under: 乱语 — 标签:, , , , , , — hellyguo @ 20:58

公司开发了一套系统,分多个模块,部署于客户提供WebSphere上,通过设置启动顺序,可以正常运行。现在要搭建模拟演示系统,搭建在公司自己的Linux下。公司没有WebSphere的Linux版(有也不能用,没license),就选择部署在Tomcat下。
本来我们开发也是在Windows下的Tomcat调试的,完全没问题。结果部署到Linux下,问题来了,启动顺序完全不是预期的顺序!
在Windows下,我们是将配置好的xml文件放置于conf/Catalina/localhost,按启动顺序命名为1.xx_a.xml/2.xx_b.xml/3.xx_c.xml/4.xx_d.xml。这样,系统就能正常在Tomcat下运行起来。可是,这样设置,在公司服务器上就是不行!启动顺序一直不是1-2-3-4,而是4-2-3-1。
一开始以为是Tomcat版本问题,虽然Windows下版本和Linux下版本均为5.0.28,我还是为将Linux下的版本升级到了6.0.20。可惜,无济于事。
在网上搜索关于Tomcat启动顺序的文章,都说Tomcat是按字母顺序加载配置文件的。可怎么设置都没有用。在被Tomcat折磨了一天半后,我开始寄希望于有开源的J2EE容器,可以像WebSphere一样,设置启动顺序。在逐一安装了jetty,jonas,jboss,resin,glassfish后,我悲哀地发现,所有这些,都不支持对应用设置启动顺序。
最后尝试了WebLogic。昨天深夜,挂机下载WebLogic 10.3。今天上午安装后发现,WebLogic和WebSphere一样,也能设置启动顺序。很兴奋,想用,但还是打了退堂鼓(也没有license,不能也不敢用)。
最后一条路了,翻看Tomcat的源代码。
下载了Tomcat6.0.20的源代码,在HostConfig.java中找到了那块加载xml的代码。
Line490:

// Deploy XML descriptors from configBase
deployDescriptors(configBase, configBase.list());
// Deploy WARs, and loop if additional descriptors are found
deployWARs(appBase, appBase.list());
// Deploy expanded folders
deployDirectories(appBase, appBase.list());

原来启动顺序就是File.list()的顺序!
又下载Tomcat5.0.28的源代码,查看HostConfig.java,还是如此:
Line426:

String configFiles[] = configBase.list();

Line430:

String files[] = appBase.list();

Line568:

deployDescriptors(configBase(), configBase.list());

Line813:

String files[] = appBase.list();

Line989:

String configFiles[] = configBase.list();

确认了,Tomcat的加载的确是与File.list()有关。
写了个测试代码确认问题:
Test.java

package fileClass_listMethod;

import java.io.File;

public class Test {
public static void main(String args[]) throws Exception {
File file = new File(“.”);
String[] files = file.list();
for (int i = 0; i < files.length; i++) {
System.out.println(files[i]);
}
}
}

这个程序的输出,在大部分操作系统中,是相同的。但的确是存在不同的情况,我,就中奖了。
公司服务器,RHEL4

$ uname -a
Linux xxxweb2008.localdomain 2.6.9-5.ELsmp #1 SMP Wed Jan 5 19:30:39 EST 2005 i686 i686 i386 GNU/Linux
$ java -version
java version “1.5.0_12”
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_12-b04)
Java HotSpot(TM) Server VM (build 1.5.0_12-b04, mixed mode)
$ java Test
Test.java
4.xx_d.xml
2.xx_b.xml
Test.class
1.xx_a.xml
3.xx_c.xml

我的T400,WinXPSP3

2600.xpsp_sp3_gdr.090804-1435 : Service Pack 3
>java –version
java version “1.5.0_07”
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_07-b03)
Java HotSpot(TM) Client VM (build 1.5.0_07-b03, mixed mode, sharing)
>java Test
1.xx_a.xml
2.xx_b.xml
3.xx_c.xml
4.xx_d.xml
Test.class
Test.java

我的虚拟机Linux,Debian 5.02

$ uname -a
Linux debian.vmware 2.6.26-2-686 #1 SMP Wed Aug 19 06:06:52 UTC 2009 i686 GNU/Linux
$ java -version
java version “1.6.0_12”
Java(TM) SE Runtime Environment (build 1.6.0_12-b04)
Java HotSpot(TM) Client VM (build 11.2-b01, mixed mode)
$ java Test
1.xml
2.xml
3.xml
Test.class
Test.java

由此可见,网上说的Tomcat启动顺序是基于字母顺序,并不准确。严格说,是基于操作系统的底层实现。基于字母顺序,只是大多数系统的情况。查看JavaDoc,明确说明了此点:
list
public String[] list()
返回由此抽象路径名所表示的目录中的文件和目录的名称所组成字符串数组。
如果此抽象路径名并不表示一个目录,则此方法将返回 null。否则,为目录中的每个文件或目录返回一个字符串数组。表示目录本身及其父目录的名称不包括在结果中。每个字符串是一个文件名,而不是一条完整路径。
不保证所得数组中的相同字符串将以特定顺序出现,特别是不保证它们按字母顺序出现。
返回:
由此抽象路径名所表示的目录中的文件和目录的名称所组成字符串数组。如果目录为空,则数组也将为空。如果抽象路径名不表示一个目录,或者发生 I/O 错误,则返回 null。
抛出:
SecurityException – 如果存在安全管理器,且其 SecurityManager.checkRead(java.lang.String) 方法拒绝对目录进行读取访问
直接修改Tomcat5.0.28的HostConfig.java
Line427:

String configFiles[] = configBase.list();
Arrays.sort(configFiles, 0, configFiles.length);
deployDescriptors(configBase, configFiles);

Line432:

String files[] = appBase.list();
Arrays.sort(files, 0, files.length);
deployWARs(appBase, files);

Line571:

String[] cfgFiles = configBase.list();
Arrays.sort(cfgFiles, 0, cfgFiles.length);
deployDescriptors(configBase(), cfgFiles);

Line818:

String files[] = appBase.list();

if (files != null) {
Arrays.sort(files, 0, files.length);

Line995:

String configFiles[] = configBase.list();
Arrays.sort(configFiles, 0, configFiles.length);
deployDescriptors(configBase, configFiles);

重新更新了catalina.jar后,启动Tomcat5.0.28,应用按排定顺序正常启动。
也修改了Tomcat6.0.28的HostConfig.java:
Line491:

// Deploy XML descriptors from configBase
String[] configFiles = configBase.list();
Arrays.sort(configFiles, 0, configFiles.length);
deployDescriptors(configBase, configFiles);
// Deploy WARs, and loop if additional descriptors are found
String[] appFiles = appBase.list();
Arrays.sort(appFiles, 0, appFiles.length);
deployWARs(appBase, appFiles);
// Deploy expanded folders
deployDirectories(appBase, appFiles);

update:我将这点作为增强点提交到Tomcat的bugzilla了,URL
update:提交被否决了,认为Web程序都是独立的,不应该依赖于加载顺序。

2009-11-27

Windows Server 2008的IIS7启用WebDAV

Filed under: 未分类 — 标签:, , — hellyguo @ 10:58

1.安装iis7,选择安装身份验证
2.在www.iis.net下载webdav_x86_75.msi,安装之
3.在Default Web Site上启用WebDAV
4.新建虚拟目录
5.在新建的虚拟目录上设置WebDAV的访问规则,确认此虚拟目录上启用身份验证
6.映射网络驱动器

Older Posts »

%d 博主赞过: