Vista的Symbolic Link

以前一直是只有Unix-like系统上面才有Symbol Link的概念。在Unix下,Symbol Link带来了无数的好处(当然也是有缺点的)。

简单的例子,假如你创建了一堆具有相对链接的东西(比如网站上面用的页面)。如果某个文件的位置发生了变化,你会如何操作?在以前的Windows中,就要逐一修改HTML页面,指向新的位置,却难免少改了一个两个文件的。而Symbol Link正好解决这样的问题。只需要在老的位置创建一个Symbol Link,这样所有指向老的link的地方,都会自动转到新的位置。

另一个例子,在编译程序的时候(尤其是你使用Make的时候),比如lib/dll/…之类的东西有版本的区别,Unxi一般是这样写的:libxxxx-1.0.0.so,libxxxx-1.0.1.so。如果在Make文件中直接指定这些文件,不仅在版本升级的时候改起来很麻烦,而且一旦少改了一个,很可能出现莫名其妙的错误。Symbol Link上~~~

Vista开始直接支持Symbol Link了(Dev Ref),你可以使用mklink(CLI APP)来创建Symbol Link。从GUI上看,Symbol Link就是表示为一个0字节的快捷方式。在CLI里面,面向目录的Symbol Link被表示为<JUNCTION>和<SYMLINKD>;而面向文件的,则被表示为<SYMLINK>;。mklink也支持Hard Link,创建的Hard Link直接表示为和target文件一样的一个新文件。

Symbol Link和Shortcut Link是不一样的,这里我举个我刚刚完成的例子:

例子1:

前提:我使用的虚拟机是Virtual Box。刚刚装好的时候,我创建了一个Ubuntu的虚拟机。硬盘文件达到了3.5GB,这时我希望把这个文件复制到别的盘,以便节省我的硬盘空间。(这个例子其实没有Symbol Link也是完全可以的)

如果没有Symbol Link,我会这样做:首先复制Ubuntu.vdi文件到新的地方,然后启动Virtual Box修改硬盘文件的位置。

而我现在是这样做的:复制Ubuntu.vdi到新的地方,然后用mklink创建一个Symbol Link。搞定,Virtual Box仍然没有任何的变化。

当然,我使用的这个例子,不用Symbol Link也不会增加多少麻烦,可如果真的是需要修改的内容很多,那么手工修改,自然就不太适合了。不过,在这个例子中,仍然有个局限。图中的F:\是我的一个USB移动硬盘。估计有人想到了:现在移动硬盘是F:\。如果我在接入这块移动硬盘前,先 插了一个其他的存储设备,占用了F:\。那么,在之前指向F:\的Symbol Link仍然是无效的。这只能怪该死的微软,非要用字母表示分区,还是动态的。如果向Unix那样,可以任意把不同的设备挂在指定的目录中,也就没有这个 事儿了。

例子2:

前提:Vista有个Public文件夹,用来存放和用户无关的照片、音乐等。而我把MP3都复制到了Public\Music文件夹中。之前的做法是,在%HOMEPATH%\Music下创建一个Shortcut link到%PUBLIC%\Music。

使用Symbol Link可以近乎完美的解决这个问题:删除%HOMEPATH%\Music文件夹,创建一个名为%HOMEPATH%\Music的JUNCTION,指向%PUBLIC%\Music文件夹。这样的结果就是,一步多于的操作都没有,就把Music重定向到Public了。开始菜单、Favorite Link,总之以前所有指向%HOMEPATH%\Music的地方,全都自动转向%PUBLIC%\Music了。 更关键的是,以后即便不希望这种重定向发生,需要做的也只是删除Symbol Link即可。

那么Hard Link和Symbol Link有什么区别呢?在Vista中,Symbol Link其实是创建了一个指向目标文件的索引,所以当Symbol Link指向的文件被删除时,访问Symbol Link就会出现File not found的错误(就好像是快捷方式指向的文件被删除了);而Hard Link则更像是文件的另一个名字(它们虽然同名,却存储在同一片磁盘空间中),创建一个Hard Link仅仅相当于给文件添加一个“别名”,而只有当所有的名字都被删除时,文件才会真正的删除。

举例来说,如果有文件Test.txt,创建一个名为TS的Symbol Link;当文件Test.txt被删除以后,再编辑TS的时候,就会得到一个“找不到文件”的错误。而同样是Test.txt,创建一个名为TH的Hard Link;当文件Test.txt被删除后,再编辑TH,仍然是可以的。因为此时TH仍然指向以前Test.txt的空间,而删除Test.txt,只是删除了存储Test.txt文本的一个别名而已,文件实际上并没有删掉。

那么似乎Hard Link更实用一些?其实不一定,就象之前所说的,Hard Link只是指向同一磁盘区域的一个“别名”,那就是说,如果Hard Link和目标文件不在同一个分区上,别名也就不复存在了。所以Hard Link和目标文件被要求放在同一磁盘分区中。显然,Symbol Link的适用范围更广一些。

Update Aug. 17th, 2007  23:03 PST:好像有个问题,%USERPROFILE%\Links是存放显示在Explorer左侧的Favorite Links的地方,但这里貌似不支持创建指向Symbol Link(或Junction)的快捷方式。

Posted by Wei@14:36 15/15/2007 in Computer Science | Permalink | Trackback | No comments.

招行财富账户专业版居然支持Vista了

买了本本以后,一直以为和招行无缘了。因为招行无论是财富账户还是个人银行专业版,都是不支持Vista操作系统的。

今天偶然的机会,想起来试试看招行的软件,就从招行财富账户主页上面下载了一个软件(招行这一点做的非常不好,发布新版,根本就不知道。网站上没有任何信息,下载的文件也没有版本号的标志,甚至如果不安装都不知道有什么改进,即便安装了,也要自己琢磨新增功能)。

安装结束之后,居然提示“恭喜您已经成功在Vista上安装了财富账户专业版……”,我吃了一惊,财富账户居然支持Vista了。从桌面上启动,却有一个UAC的提示,看了一下详细信息,是专业版的自动升级程序。所以点Allow还是Cancel都是无所谓的。主页面上的滚动条问题还是没解决,和XP系统下相比,有过之而无不及。

点“登录”按钮,弹出的窗口更是惨不忍睹。完全没有美观可言。横向的滚动条甚至挡住了状态栏(这时登录的过程就象死机了一样)。

不过这种界面问题,报告给招行。向来只能得到一种很无辜答复:“我们这里没问题啊?” 。都不知道招行的开发都干什么吃了。

再看看财富账户登录的窗口,却正常的要命。不仅如此,XP系统下密码输入控件狂锁键盘的事情也消失了Update May 30 PST:过分锁键盘的事情又发生了,就是表现在下面窗口弹出的情况下,无论当前焦点在什么地方,键盘时间都被密码输入控件捕获了。换句话说,如果这个窗口弹出来,唯一能做的事情,就是放下所有的应用程序,输入密码。)。总的来说财富账户的登录页面远比专业版登录要漂亮得多。

主页面还是可以接受的,除了“系统”菜单别扭点儿,其他还都正常。版本号显示为5.1.1.1(注意:这里是唯一可以查看版本号的地方,招行就不能让客户省心一点儿?)

最后来看,退出和重登录时要求拔出key的提示,仍然存在。(这我很不懂。再次强调,如果是退出,强制拔出key,我还是可以接受的;可重登录怎么办啊,拔下来->退出去->插上->登录,这不是有毛病吗?)

虽然招行这次财富账户的更新,大毛病没有(不一定是没有,只是没发现;还有就是拒不承认的:以前给他们报过财富账户可能泄露用户账户信息的Bug,明显的Bug,给几个客户经理都验证了。最后电脑部倒是承认了,说“虽然账户信息(帐号、实时余额等)显示出来了,但无法转账,所以……没事”),小毛病不断的,但好歹支持了Vista,也算个进步了。我以为招行只会支持2000、XP、2003呢。

PS:我就纳闷了,你说一个退出前提示拔出key的窗口,不拔出Key,就不让退出。这不是吃饱了撑的吗?给个提示就完了,干嘛非要非拔不可呢。

Tags: , , ,
Posted by Wei@14:00 17/17/2007 in banking | Permalink | Trackback | No comments.

Vista恢复引导菜单

今天突然遇到这样的问题,双系统的机器,因为装过Vista后又装过XP,导致Vista的引导菜单消失。

具体方法如下:

  1. 首先打开Vista的安装源,进入boot目录
  2. 输入:
    1. bootsect /nt60 SYS

  3. 重新启动,Vista 的启动管理器已经恢复。

PS:因为Vista使用了新的引导管理器,以前的的NTLDR已经不在Vista中使用了(更别提是修改C:\boot.ini了)

Posted by Wei@10:05 5/05/2007 in Computer Science | Permalink | Trackback | No comments.