现在的位置: 首页 > 综合 > 正文

一次cygwin的绿化 – 顺便多学一些脚本/注册表的知识

2013年07月30日 ⁄ 综合 ⁄ 共 2942字 ⁄ 字号 评论关闭
 前几天,客户提供了一些资料,我们的项目需要使用cygwin来处理文件,并且还提供了一些相关文档之类的。

由于之前没有接触过这个玩意,所以前期的安装还是费了一点时间。
cygwin只有一个exe安装文件,但是其他的功能模块都是要另外安装的,而且最开始的一些东西都是直接通过internet安装的。
网速又不是很快。

安装完成之后,会在你选定的位置保留一份下载的文件。
然后,其他人可以使用local安装方式,选择目录的时候就选择这份下载的文件的目录就可以了。

不过,听说项目组里面其他人安装的时候,总是有很多问题,导致最后许多命令使用不了,或者干脆就无法使用等问题。

接下来,我就假设这个软件其实是绿色的,然后从别人的机器上拷贝了一份当初安装OK的,在我自己的机器上使用,
一切OK。
可是,拿到另外一个从来没有安装过cygwin的机器上,就不能够使用,认不出目录结构来。

于是,在注册表里面查询了一下,发现cygwin安装的时候,果然在注册表里面写了一些东西。
其中有一部分看起来有用,并且和目录结构相关的,
 -我的电脑
   -HKEY_LOCAL_MACHINE
     -SOFTWARE
       -Cygnus Solutions
         -Cygwin
           -mounts v2
             -/
             -/usr/bin
             -/usr/lib
         -Program Options

其中-/,-/usr/bin,/usr/lib下面都有一个名字为native的变量,值就是具体的路径。

经过测试确认,只要从某台已经安装好cygwin的机器A上把安装好的目录全部拷贝到另外一台没有安装过cygwin的机器B,
然后在机器B中的注册表中添加上面的注册表项,机器B上的cygwin就可以使用了。

基于这个调查分析的结果,然后在搜索引擎上搜了一把,并且经过了一些调试,终于搞出了一个绿化的cygwin。

1. 要先做一个安装好并且可以使用的cygwin。
2. 写一个windows脚本,可以把相关的注册表项添加到注册表中。
3. 另外写一个windows脚本,可以把增加了注册表项删除。

脚本如下:
添加注册表的脚本register.bat

set "curpath=%cd%"
set "curpath=%curpath:/=//%"
set "regname=register.REG"

if exist %regname% del %regname%

echo REGEDIT4>>%regname%
echo.>>%regname%
echo [HKEY_LOCAL_MACHINE/SOFTWARE/Cygnus Solutions]>>%regname%
echo [HKEY_LOCAL_MACHINE/SOFTWARE/Cygnus Solutions/Cygwin]>>%regname%

echo [HKEY_LOCAL_MACHINE/SOFTWARE/Cygnus Solutions/Cygwin/mounts v2]>>%regname%
echo "cygdrive prefix"="/cygdrive">>%regname%
echo "cygdrive flags"=dword:00000020>>%regname%

echo [HKEY_LOCAL_MACHINE/SOFTWARE/Cygnus Solutions/Cygwin/mounts v2//]>>%regname%
echo "native"="%curpath%">>%regname%
echo "flags"=dword:00000008>>%regname%

echo [HKEY_LOCAL_MACHINE/SOFTWARE/Cygnus Solutions/Cygwin/mounts v2//usr/bin]>>%regname%
echo "native"="%curpath%/bin">>%regname%
echo "flags"=dword:00000008>>%regname%

echo [HKEY_LOCAL_MACHINE/SOFTWARE/Cygnus Solutions/Cygwin/mounts v2//usr/lib]>>%regname%
echo "native"="%curpath%/lib">>%regname%
echo "flags"=dword:00000008>>%regname%

echo [HKEY_LOCAL_MACHINE/SOFTWARE/Cygnus Solutions/Cygwin/Program Options]>>%regname%
regedit /s "%regname%"

del %regname%

rem [create Cygwin.bat file]
set "path=%cd%"
set "startname=Cygwin.bat"
if exist %startname% del %startname%

echo @echo off>>%startname%
echo.>>%startname%
echo %path:~0,2%>>%startname%
echo chdir %path%/bin>>%startname%
echo.>>%startname%
echo bash --login -i>>%startname%

删除注册表项的脚本-unregister.bat

set "regname=unregister.REG"

if exist %regname% del %regname%

echo REGEDIT4>>%regname%
echo.>>%regname%
echo [-HKEY_LOCAL_MACHINE/SOFTWARE/Cygnus Solutions2]>>%regname%

regedit /s "%regname%"

del %regname%

相关知识点:
1. windows系统中的注册表内容是可以导入导出的
   导出是通过regedit操作的,导入可以通过regedit操作,也可以直接直接双击*.reg文件操作。
2. 绿色软件的一个重要特征就是不需要写注册表,可以直接运行。
3. 如果想要把某些软件进行绿化,可以找出这个软件安装后在注册表里面写入的内容,然后把这些内容通过脚本文件
写入到注册表中就可以实现绿化了。
4. windows系统的一个特征就是会在注册表里面保留很多垃圾内容,所以绿化软件的时候,最好也提供相应的卸载脚本。
5. 脚本中可以通过regedit /s *.reg的方式在暗地里操作注册表。
6. 通过脚本可以实现很多功能,所以,有时侯要开发一些小工具的时候,maybe可以直接使用脚本来开发,而不需要写
java,C++等代码。
7. cygwin的很多命令可以直接在windows下面使用。
   因为cygwin模拟unix的命令的功能比windows下的很多命令要强大,所以可以把cygwin的bin目录放到path中的
system32前面,然后就可以在cmd窗口中直接使用cygwin了。

参考资料
1. cygwin官方网站:http://cygwin.com
2. cygwin中国镜像:http://cygwin.cn

抱歉!评论已关闭.