无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: lxl1638
打印 上一主题 下一主题

[V1.30.2011.501版]WimTool -- Wim文件的图形视窗处理工具[无忧首发]

    [复制链接]
31#
 楼主| 发表于 2007-6-12 17:23:40 | 显示全部楼层
原帖由 wjh88 于 2007-6-12 04:32 PM 发表



:D 感谢老九的不懈努力,为表示支持,提供用于编写WIMGAPI应用程序(如wimtool)的完整源代码, 声明不是本人作品(本人金盆洗手多年),是一外国网友Vijay Thirumalachari用C#编写的。我想老九是用C++ ...


这个本人已有,不过还是多谢。

它是对WIMGAPI.DLL的再次封装。本人想直接用WIMGAPI.DLL读取Wim文件的XML信息,
不想通过另一个.DLL(强迫自己去认识一下XML)。
回复

使用道具 举报

32#
 楼主| 发表于 2007-6-15 18:35:26 | 显示全部楼层
原帖由 原名丢了 于 2007-6-15 03:59 PM 发表

我觉得你理解错了,我说的不是指一个WIM文件中加入另一个镜像包,我是指一个镜像包中的文件内容的变动。
比如我要升级KASPERSKY的病毒库,如果能拖拽,不是很方便吗?

不知道你用过WINMOUNT软件没有,像ULTRAISO一样,很方便的。


        不管是WINMOUNT还是ULTRAISO,对一个映像文件(前者是RAR、ZIP等,后者是ISO等)的操作,在事前没有任何选项要求。
WINMOUNT,丢一个映像文件进去,它就可以自动MOUNT这个映像文件到可用的盘符,因为MOUNT过的映像文件在UNMOUNT
时无法更新原来的映像文件,如MOUNT一个TEST.RAR到K:盘,你可以修改K:盘的内容(复制、删除文件,修改原有的文件),但
UNMOUNT后无法保存这种修改(即你不能将K:盘的新变化更新到原来的TEST.RAR中)。而WimTool不同,当一个映像文件以可写
方式MOUNT到一个目录下,你对这个目标目录的修改可以更新到原来的Wim映像中。所以WINMOUNT可以做到丢文件进去就直接
MOUNT,因为它无需确定MOUNT的方式;ULTRAISO也可以支持拖拽,因为所有文件的变化是否需要更新可以在最后才确定;而
WimTool要求事前就要确定,即拖拽一个文件进去,就要确定它MOUNT的方式才能开始MOUNT。

至于对Wim映像文件MOUNT的目标目录的操作,就如同对一个目录的操作了,你打开这个目录,如果是可写方式MOUNT的,
你可以象真实目录一样操作它(复制、删除文件等),在UNMOUNT时这种变化可以更新到原Wim映像中。

要支持目标目录的拖拽操作,在WimTool中就要开多一个列表,也不如打开目录直接操作方便。
回复

使用道具 举报

33#
 楼主| 发表于 2007-6-20 11:27:02 | 显示全部楼层
原帖由 nn2nn 于 2007-6-16 05:16 PM 发表
建议:
wimtool支持MOUNT命令行参数。

有时wimtool也用在CMD里。


更新一下,1.07.0623版。

1、应 nn2nn 的要求,增加了两个命令行参数;
2、修正了映卷号输入框的一处BUG(原这个输入框的数字被删空时会弹出一个窗口);
3、修改了若干处的信息提示内容;
4、将全部非英文字符串做入资源文件,方便繁体本地化。
回复

使用道具 举报

34#
 楼主| 发表于 2007-6-20 14:29:30 | 显示全部楼层
原帖由 nn2nn 于 2007-6-20 02:00 PM 发表
4、将全部非英文字符串做入资源文件,方便繁体本地化。

LZ做了大量的工作。
资源再恢复到原来的地方,也是很麻烦,就是105代表什么,不知道要查多少次。

LZ辛苦了。


的确是这样,以代码中引用资源本人历来最怕了,资源字符串多的时候,要来回反复查资源ID。
回复

使用道具 举报

35#
 楼主| 发表于 2007-6-23 20:48:02 | 显示全部楼层
更新到V1.07.0625版,增加了对映卷名的处理和查看映像详细信息两项功能(见主题的红字),
同时简单美化了一下界面,支持XP主题(要在XP或Vista系统中才能体现)。

[ 本帖最后由 lxl1638 于 2007-6-23 09:24 PM 编辑 ]
回复

使用道具 举报

36#
 楼主| 发表于 2007-6-24 11:57:08 | 显示全部楼层
原帖由 yanghere 于 2007-6-24 04:06 AM 发表
打开一个比较大的wim(vista安装盘中的install.wim 2.22G)查看镜像信息时出现以下情况,必须在任务管理器里强行关闭


你将那个 Install.wim 文件的信息(用参数 /INFO)导出来,帖上论坛让本人看看,估计(2G)是数值越界了,要处理一下代码看看。
回复

使用道具 举报

37#
 楼主| 发表于 2007-6-24 13:01:24 | 显示全部楼层
原帖由 yanghere 于 2007-6-24 12:11 PM 发表
我用imagex的/info得到的,老九看看啊


搞定了,要整理一下,半小时以后不发的话,下午再发。
你帮本人对照一下结果是不是一样,是到一个有Vista系统的朋友家里测试的(本人的破机装不起该死的Vista),
不看不知道,2G多的DVD中有5个不同版本的Vista系统!
执行查看映像信息任务...

读取映像文件属性...
打开映像文件: 成功
读取映像属性: 成功
关闭映像文件: 成功

读取映像文件信息...
打开映像文件: 成功
读取映像信息: 成功
关闭映像文件: 成功

映像基本属性如下:

文件路径: G:\Windows.Vista\install.wim
设备GUID: {A4C5C101-EB8E-4C4E-AE15-4343BC255E20}
映像卷总数: 5
所属压缩类型: 最大压缩
是否属分包文件: 否
可启动映像卷号: [没有设置]
映像文件大小: 2323919438字节

各分卷详细信息如下:

映像卷号: 1
映像卷名: Windows Vista BUSINESS
映卷描述: Windows Vista Business
目录数目: 7147
文件数目: 39062
解开大小: 7135020290字节
创建时间: 2006-11-2, 13:37:2
修改时间: 2006-11-6, 2:4:22

映像卷号: 2
映像卷名: Windows Vista HOMEBASIC
映卷描述: Windows Vista HomeBasic
目录数目: 6715
文件数目: 36867
解开大小: 6631599418字节
创建时间: 2006-11-2, 13:34:8
修改时间: 2006-11-6, 2:7:52

映像卷号: 3
映像卷名: Windows Vista HOMEPREMIUM
映卷描述: Windows Vista HomePremium
目录数目: 7218
文件数目: 39260
解开大小: 7999966017字节
创建时间: 2006-11-2, 13:40:41
修改时间: 2006-11-6, 2:13:54

映像卷号: 4
映像卷名: Windows Vista ULTIMATE
映卷描述: Windows Vista Ultimate
目录数目: 7625
文件数目: 40982
解开大小: 8088242253字节
创建时间: 2006-11-2, 13:41:31
修改时间: 2006-11-6, 2:18:24

映像卷号: 5
映像卷名: Windows Vista STARTER
映卷描述: Windows Vista Starter
目录数目: 6641
文件数目: 36345
解开大小: 6555029787字节
创建时间: 2006-11-2, 14:3:12
修改时间: 2006-11-6, 2:23:10

查看映像属性: 成功
查看映像信息: 成功

[ 本帖最后由 lxl1638 于 2007-6-24 01:03 PM 编辑 ]
回复

使用道具 举报

38#
 楼主| 发表于 2007-6-24 14:07:18 | 显示全部楼层
搞定,功能不变,仅是修正BUG,所以版本号定为:
WimTool V1.07.0625F

1、修正了 yanghere  提到的GUB,支持对超大映像的处理;

2、在XP/2K3及其PE系统中对XML组件服务进行检测,若不发现XML,
     WimTool直接屏蔽与之相关的的功能。但在Vista系统中现有
     的API无法对XML组件服务进行检测,所以在Vista系统中这些
     功能是开放的,精简的PE2.0如果没有这项服务时这些功能也
     不能使用(强行使用时可能会使WimTool挂死)。

[ 本帖最后由 lxl1638 于 2007-6-24 02:20 PM 编辑 ]
回复

使用道具 举报

39#
 楼主| 发表于 2007-6-24 15:54:57 | 显示全部楼层
原帖由 yanghere 于 2007-6-24 02:36 PM 发表
老大就是老大,效率真是太高啦!
已经下载并测试,可以支持了。
感谢老九:victory:


有空慢慢帮本人测试其它功能,如果没有出有BUG,这个工具就停止更新了。

另,用它打开大体积的文件时好象很慢,不知 Imagex 也是不是这样的?
回复

使用道具 举报

40#
 楼主| 发表于 2007-6-24 16:31:06 | 显示全部楼层
原帖由 nn2nn 于 2007-6-24 04:05 PM 发表
1、修正了 yanghere  提到的GUB,支持对超大映像的处理;

通过什么办法可以修正这个BUG?


先检测OLE变量的类型,对不同的类型再作不同的转型。
不过发现,WimTool里所用到的数据都是 String 类型的,
后来本人又把检测变量类型这部分代码砍掉了,直接转型。
回复

使用道具 举报

41#
 楼主| 发表于 2007-6-24 17:42:50 | 显示全部楼层
XML控件的属性是OLE类变量,有些是 WideChar 类型,有些是 DWORD 类型,有些是 Int64 类型。

没有对变量作必要的检测,在一些没有设置"映卷名"的映像里,While循环不会发现有 Child_Node.NodeName 的,没有发现它也就读不到映像的这个字节(元素)。本人是用 First_Node.ChildValues['NAME'] 去读取映像的名字,它的返回值给下面的函数分析:

function OleVarToString(const OleValue: OleVariant): string;
{$J+}const NotSetStr: string = ''; {$J-}
begin
  if NotSetStr = '' then
    NotSetStr := LoadMyResString(IDS_NotSet); //NotSetStr是字符串[没有设置]
  if VarIsNull(OleValue) then Result := NotSetStr
  else Result := String(OleValue);
end;

因此 OleVarToString(First_Node.ChildValues['NAME']) 返回的字符串是映卷的名字或[没有设置](如果没有设置的话)
如果不用 VarIsNull 对变量 OleValue 作简单的判断直接用 String(OleValue) 转型的话会出错。

[ 本帖最后由 lxl1638 于 2007-6-24 05:46 PM 编辑 ]
回复

使用道具 举报

42#
 楼主| 发表于 2007-6-24 18:43:57 | 显示全部楼层
本人所说的While是对'IMAGE'而言的,在While里历扁所有的'IMAGE'。

有些映卷是没有名字的,即还没有设置名字,肯定找不到,name的值必为'',
又判断 name 的值是否为''?即:

if name  = '' then name:='[没有设置]';

同样有些映卷也没有描述的,又要判断一次描述是否已设置。


你与本人的区别是:
你是用 FindNode 找子节的方法,如果这个节不存在就找不到,要在一轮循环后对你的找的节是否存在作判断。
本人是用 ChildValues 读节的方法,如果读出为 NULL 说明它没有设置,能读到就是它的真实数据,读不到就将这个数据说明为'[没有设置]',代码量会更少。

映卷名 := OleVarToString(First_Node.ChildValues['NAME']);
卷描述 := OleVarToString(First_Node.ChildValues['DESCRIPTION']);

[ 本帖最后由 lxl1638 于 2007-6-24 06:45 PM 编辑 ]
回复

使用道具 举报

43#
 楼主| 发表于 2007-6-25 22:16:53 | 显示全部楼层
有BUG或其它要求的尽早报来,准备在7.1前完成它的最终版!
回复

使用道具 举报

44#
 楼主| 发表于 2007-6-26 07:20:49 | 显示全部楼层
原帖由 nn2nn 于 2007-6-25 11:02 PM 发表

能不能在新制的WIM中加入

类似这样的信息。
PATH=WIM映像的源目录;
CANEDIT表示生成的WIM挂载是否可写,其值为“FALSE” 或“TRUE”。

方便以后的WIM工具挂载。


<MOUNT VER="1.0" PATH="D:\TOOLS\维护工具" CANEDIT="TRUE" />

没有这个打算,不准备在WIM的Info中加插WimTool自己的信息,
CANEDIT="TRUE" 只能限制自己是否可以编辑这个WIM文件,
并不能限制其它工具(如 Imagex )修改它,实在没有意义。

也曾想在WIM文件加加入如下信息:
<WIM>
    <IMAGE INDEX="1">
        <MAKER>
            <PRPGRAM>WimTool</PRPGRAM>
            <VER>1.07.0701</VER>
            <SOURCE>D:\TOOLS\维护工具</SOURCE>
            ......
            ......
        </MAKER>
    </IMAGE>
</WIM>


但考虑到其它工具查到这些信息可能会反感,所以决定在WIM映像中不加插任何信息。


回复

使用道具 举报

45#
 楼主| 发表于 2007-6-27 18:03:24 | 显示全部楼层
原帖由 pseudo 于 2007-6-27 12:20 PM 发表
1、试挂到X:盘上失败,原因可能是X:盘已用了FBWF服务,不能再挂wim。
     据说“在PE中开启WimFltr、FBWF两项服务时有先后之分,启动FBWF服务必须在启动WimFltr之后,
     否则无法挂接WIM映像(包括用MS的IMAGEX.EXE也无法挂接WIM映像,原因不明)。”
2、试挂到Pe光盘,用pecmd和最新版wintool都失败,这点不明白。
3、试挂到ram disk成功。这个ram disk是用ramdisk.exe做的。
     但ramdisk.exe是图形界面的,不便自动化(试了模拟按键操作效果不好),
     请教大家有什么好工具方便自动做ram disk?
4、试以可写的方式挂载失败,可能是wim在光盘的原因。


1、在PECMD的MOUN命令中已有说明
2、原因是1,PE启动后已开启了FBWF
3、与WimTool和PECMD都无关
4、在光盘上的文件是只读的

基于ISO格式的PE在使用上有一定的限制,因为ISO要在开启FBWF后才可写,
在开启FBWF之前什么也做不了,所以本人放出的PE一直都采用IMG格式。

[ 本帖最后由 lxl1638 于 2007-6-27 06:13 PM 编辑 ]
回复

使用道具 举报

46#
 楼主| 发表于 2007-6-27 18:08:28 | 显示全部楼层
更新到 1.07.0701版:

1、调整了界面,使WimTool的界面更合理紧凑;
2、增加了功能,可以在制作、追加映像和修改映卷信息时加入映卷描述;
3、优化了代码,使WimTool执行更有效率;
4、完善了线程,制作映像的进度条终于出现了(以前的版本只有在解开映像才出现进度条);
5、增加了对Vista运行环境的简单检测。

[ 本帖最后由 lxl1638 于 2007-6-27 06:16 PM 编辑 ]
回复

使用道具 举报

47#
 楼主| 发表于 2007-6-27 22:28:18 | 显示全部楼层
原帖由 nn2nn 于 2007-6-27 10:11 PM 发表


到这一步,WimTool可能走完其开发历程了。
老九不是想弄一个从WIM引导的基于XP的PE吧!


第1个问题,的确是这样,在没有严重BUG的前提下WimTool不再更新;
第2个问题,本人无能为力。
回复

使用道具 举报

48#
 楼主| 发表于 2007-6-29 11:54:21 | 显示全部楼层
原帖由 jl580650 于 2007-6-29 11:31 AM 发表
钩选"自动打开目录"挂载时,wimtool会没响应大概3-5秒,并且wimtool前置(在所有窗口最前面),貌似从625版就有这个问题


1、是新增的功能,你可用可不用。
2、你挂载什么文件?你的是什么机子?要等3~5秒?
     本人的机子不用0.3秒,那个等待是等候打开目录的。
3、此时WimTool的窗口在所有窗口电前面是较合理的设计,若你要继续使用WimTool,
     让它保持在最前面,若你要使用其它软件或操作那个目录,可以最小化WimTool。
     如果不将WimTool的窗口放在所有窗口最前面,打开的目录会复盖掉WimTool的窗口,
     对继续操作WimTool不方便。

      关键是第1点:新增的功能,WimTool会自动打开目标文件夹,你可用可不用。
你认为有用或有必要用就用,否则可以不用。
回复

使用道具 举报

49#
 楼主| 发表于 2007-6-29 14:01:28 | 显示全部楼层
其实这样也不错,要继续操作WimTool就让它在最前面,要操作其它就最小化WimTool。
回复

使用道具 举报

50#
 楼主| 发表于 2007-6-29 17:10:23 | 显示全部楼层
它的可能是64位CPU或在64位系统中运行WimTool,所以才出现一些意想不到的事。

本人不是用你上面那个原理,你这个可以打开目录,但不能关闭被打开的文件夹。
在WimTool里打开目录用的是有返回的 ShellExecCuteXX 函数,它不用设置延时等候,
可以根据它的返回值判断目录是否被打开,且可以在卸载关闭这个目录。

至于窗口是否要置最顶,是小问题,也不想再更新了,就当那个功能不存在,觉得
滑用的就不用算了,若不存在重大BUG,不会再更新。
回复

使用道具 举报

51#
 楼主| 发表于 2007-6-29 20:30:35 | 显示全部楼层
原帖由 jl580650 于 2007-6-29 07:48 PM 发表
:L CPU是64位
系统是WINDOWS XP SP2 x86
用秒表记了一下,大约17秒:$ (从按下"挂载映像"到右下角4个按钮从灰色变成可用状态)
:Q 只有使用自动打开目录才有这个情况


你的机子有没有XP或2003的PE?在PE下试试,或者你到32位CPU的机子试试,本人想知道是什么原因引起的。
本人在两台32位CPU的台式机试验(一台是2003,另一台是32位Vista),根本没有觉得挂载时打开目录要等待。
实际上那个过程在代码也没有延时等待过程。
回复

使用道具 举报

52#
 楼主| 发表于 2007-6-29 23:44:21 | 显示全部楼层
如果有条件,找多几台机子试试,看看其它机子是不是这样?

其他人也多试试这个功能,若这种现象有较多机子出现的话,就有必要更新一下。
回复

使用道具 举报

53#
 楼主| 发表于 2007-6-30 17:07:12 | 显示全部楼层
function OleVarToString(const OleValue: OleVariant): string;
{$J+}const NotSetStr: string = ''; {$J-}
begin
  if NotSetStr = '' then
    NotSetStr := LoadMyResString(IDS_NotSet); //NotSetStr是字符串[没有设置]
  if VarIsNull(OleValue) then Result := NotSetStr
  else Result := String(OleValue);

end;

{另 LoadMyResString 是根据资源字符串ID读取资源字符串的函数,
自己写吧,不难。因为 WimTool 所有非英文字符串都放在资源文件中;
NotSetStr 是一个静态变量,在 Delphi 可以这样定义静态变量}

[ 本帖最后由 lxl1638 于 2007-6-30 05:17 PM 编辑 ]
回复

使用道具 举报

54#
 楼主| 发表于 2007-6-30 21:46:02 | 显示全部楼层
V1.07.0701版下载已超过500,V1.07.0701F版下载也超过200。
很少有返馈信息,看来功能已完善,BUG也较少了。
回复

使用道具 举报

55#
 楼主| 发表于 2007-7-1 14:40:05 | 显示全部楼层
原帖由 nn2nn 于 2007-7-1 08:50 AM 发表
小BUG:
中,选项中,卷名和描述没有刷新。


那两个选项是给修改信息时才用的,不可能每选择一个文件就在那个位置显示出卷名和信息,
这样要每选择一个文件就要读取一次映像信息。

要真正读取那两项内容,就要点该页的最后一个按钮。
回复

使用道具 举报

56#
 楼主| 发表于 2007-7-1 21:56:43 | 显示全部楼层
差点忘了,今天是香港回归十周年,作为中国人总该要做点力所能及的事。
本人水平不足,能力有限,只好更新一下 WimTool 。

1、应网友要求,增加了一个命令行参数;
2、修改了在Vista系统中进度条的代码,使进度条在vista系统中平滑显示并走完;
3、试图修改前面有人提到的挂载时自动打开目录出现长时间不响应的BUG。
回复

使用道具 举报

57#
 楼主| 发表于 2007-7-2 11:47:59 | 显示全部楼层
原帖由 love5553 于 2007-7-2 10:06 AM 发表
命令行卸载映像  WimTool.EXE  /UnMount  /C  P=D:\PROGRAMS
是不是有问题?
我把 WimTool.EXE  /UnMount  /C  P=D:\PROGRAMS保存为一个批处理
老是不能卸载,只会打开WimTool.EXE的图形界面。。。


有这种可能,因为本人只在开始菜单的运行处调试命令行参数,没有用屁处理来调试。
回复

使用道具 举报

58#
 楼主| 发表于 2007-7-3 12:32:16 | 显示全部楼层
原帖由 sxgpic 于 2007-7-2 03:24 PM 发表
既然是自由软件,如果遵守GPL授权协议,就应该公布源代码
希望楼主将源代码根编译好的软件一起公布


还没有得到GPL的授权,老兄可否帮本人弄一份?联系了一下,太难了。

自由开源并不是等于免费。
回复

使用道具 举报

59#
 楼主| 发表于 2007-7-3 12:33:37 | 显示全部楼层
原帖由 nn2nn 于 2007-7-2 10:58 AM 发表
再增加一个命令行参数
卸载全部映像  WimTool.EXE  /UnMount  /A

卸载全部映像,以不修改方式全卸,更实用更爽快!


按你的要求,准备加上,的确这个参数太爽了,Imagex 也没有这个功能,一条命令卸下所有的WIM。
回复

使用道具 举报

60#
 楼主| 发表于 2007-7-3 22:32:37 | 显示全部楼层
原帖由 nn2nn 于 2007-7-2 10:58 AM 发表
再增加一个命令行参数
卸载全部映像  WimTool.EXE  /UnMount  /A
卸载全部映像,以不修改方式全卸,更实用更爽快!



按你的要求,更新一下:
1、加上了 /UnMount  /A  卸载全部映像的功能;
2、修正了 /UnMount 命令不能卸载映像的BUG;
3、采用多线程技术,可能对处理大体积的WIM文件有帮助(对处理小体积的WIM无帮助,也可能效率会下降,但影响不大);

这个版本某些功能是同时开4、5个线程工作的,可能耗内存比上一版本会大;

[ 本帖最后由 lxl1638 于 2007-7-3 10:37 PM 编辑 ]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-18 10:29

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表