我正在尝试更新一个win mobile 6.0项目,以允许它有更新通知。
为了使我们更容易做到这一点,我希望能够通过web界面更新安装程序CAB文件,并让web自动确定应用程序的版本。
在。net中,我知道一种确定文件版本的方法:
FileVersionInfo.GetVersionInfo
但是由于文件在CAB中,而CAB没有版本,所以我无法确定版本。
我也知道有一个extract.exe工具来提取CAB内容,但它不像在设备上安装CAB时那样提取。例如,exe文件解压缩如下:APPEXENAME~1.026
我无法从中获取文件版本。另外,我甚至不知道哪个文件是"。exe",因为很多文件都以"APPEXENAME"开头。
我想做的事情是可能的吗?还是每次更新时我都要手动输入版本号?
虽然这是一个相当古老的问题,但这里有一个答案:
Windows CE CAB文件通常使用CabWizard创建。这些CAB文件的内容可以用一些存档应用程序(例如extract或7z)查看/列出。文件名被打乱,文件名被映射到CAB内的xml文件中:
示例文件列表:
000KBDUS.002
0MSTSCAX.003
00MVKLIB.004
0TSCSCAN.006
00WPCTSC.005
FILTER~1.001
REMOTE~1.000
REMOTE~1.008
_setup.xml
TSCSHIFT.007
可以看到_setup.xml文件。它列出了文件映射(修改为实际文件名)和一些更多信息:
<wap-provisioningdoc>
<characteristic type="Install">
<parm name="InstallPhase" value="install"/>
<parm name="AppName" value="Microsoft Remote Desktop Mobile"/>
<parm name="NumDirs" value="3"/>
<parm name="NumFiles" value="8"/>
<parm name="NumRegKeys" value="4"/>
<parm name="NumRegVals" value="15"/>
<parm name="NumShortcuts" value="1"/>
</characteristic>
<characteristic type="FileOperation">
<characteristic type="%CE2%" translation="install">
<characteristic type="MakeDir"/>
<characteristic type="filterfsd.dll" translation="install">
<characteristic type="Extract">
<parm name="Source" value="FILTER~1.001"/>
<parm name="WarnIfSkip"/>
</characteristic>
</characteristic>
<characteristic type="kbdus.dll" translation="install">
<characteristic type="Extract">
<parm name="Source" value="000KBDUS.002"/>
<parm name="WarnIfSkip"/>
</characteristic>
</characteristic>
<characteristic type="mstscax.dll" translation="install">
<characteristic type="Extract">
<parm name="Source" value="0MSTSCAX.003"/>
<parm name="WarnIfSkip"/>
</characteristic>
</characteristic>
<characteristic type="MvkLib.dll" translation="install">
<characteristic type="Extract">
<parm name="Source" value="00MVKLIB.004"/>
<parm name="WarnIfSkip"/>
</characteristic>
</characteristic>
<characteristic type="wpctsc.exe" translation="install">
<characteristic type="Extract">
<parm name="Source" value="00WPCTSC.005"/>
<parm name="WarnIfSkip"/>
</characteristic>
</characteristic>
<characteristic type="tscscan.txt" translation="install">
<characteristic type="Extract">
<parm name="Source" value="0TSCSCAN.006"/>
<parm name="WarnIfSkip"/>
</characteristic>
</characteristic>
<characteristic type="tscshift.txt" translation="install">
<characteristic type="Extract">
<parm name="Source" value="TSCSHIFT.007"/>
<parm name="WarnIfSkip"/>
</characteristic>
</characteristic>
</characteristic>
<characteristic type="%CE2%Help" translation="install">
<characteristic type="MakeDir"/>
<characteristic type="RemoteDesktopMobile.htm" translation="install">
<characteristic type="Extract">
<parm name="Source" value="REMOTE~1.008"/>
<parm name="WarnIfSkip"/>
</characteristic>
</characteristic>
</characteristic>
<characteristic type="%CE11%" translation="install">
<characteristic type="MakeDir"/>
<characteristic type="Remote Desktop Mobile.lnk" translation="install">
<characteristic type="Shortcut">
<parm name="Source" value="%CE2%wpctsc.exe" translation="install"/>
</characteristic>
</characteristic>
</characteristic>
</characteristic>
<characteristic type="Registry">
<characteristic type="HKLMSYSTEMCurrentControlSetControlLayouts 0000409">
<parm name="Layout File" value="kbdus.dll" datatype="string"/>
<parm name="Layout Text" value="US" datatype="string"/>
<parm name="PS2_AT" value="kbdus.dll" datatype="string"/>
</characteristic>
<characteristic type="HKLMSoftwareMicrosoftTerminal Server Client">
<parm name="BitmapPersistCacheLocation" value="Temp" datatype="string"/>
<parm name="Shadow Bitmap Enabled" value="1" datatype="integer"/>
<parm name="CEConfig" value="Maxall" datatype="string"/>
<parm name="MapVirtualKeyLib" value="WindowsMvkLib.dll" datatype="string"/>
</characteristic>
<characteristic type="HKLMSYSTEMGWE">
<parm name="LoadRdp" value="1" datatype="integer"/>
</characteristic>
<characteristic type="HKLMSystemStorageManagerAutoLoadFilterFsd">
<parm name="Dll" value="filterfsd.dll" datatype="string"/>
<parm name="Paging" value="0" datatype="integer"/>
<parm name="LoadFlags" value="1" datatype="integer"/>
<parm name="BootPhase" value="2" datatype="integer"/>
<parm name="MountFlags" value="1" datatype="integer"/>
<parm name="FolderName" value="FILTERFS" datatype="string"/>
<parm name="RootPath" value="" datatype="string"/>
</characteristic>
</characteristic>
</wap-provisioningdoc>
您可以查看文件名映射,然后可以评估或重命名它们以从exe或dll文件中读取文件版本信息(如果这些文件包含此类信息,那么这是另一回事)。