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

 前几天,客户提供了一些资料,我们的项目需要使用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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
这个报错是由于在编译C代码时缺少了`WinMain`函数引起的。`WinMain`是Windows程序的入口函数,它在Windows GUI应用程序中使用。根据报错信息,你的代码中缺少了对`WinMain`函数的引用,导致链接错误。要解决这个问题,你可以尝试以下几个方法: 1. 确保你的代码中包含了正确的`WinMain`函数定义。检查你的代码中是否有类似于`int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)`的函数定义。 2. 确保你的代码中没有使用了错误的函数名或函数签名。检查你的代码中是否有拼写错误或者函数名错误的地方。 3. 确保你的代码中包含了正确的头文件。如果你使用了Windows API或其他相关库,确保你包含了正确的头文件。 4. 确保你的编译器和链接器设置正确。检查你的编译器和链接器的设置,确保它们能够正确地找到和链接`WinMain`函数所在的库文件。 如果你尝试了以上方法仍然无法解决问题,你可以尝试在编译命令中添加相关的库文件路径和链接选项,以确保编译器能够正确地找到和链接`WinMain`函数所在的库文件。 #### 引用[.reference_title] - *1* [运行C时报错:relocation truncated to fit: R_X86_64_PC32 against undefined symbol `WinMain‘ collect2...](https://blog.csdn.net/qq_45921491/article/details/116428973)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值