从CAB存档中提取原始文件并确定版本(.net CE 2.0应用程序)



我正在尝试更新一个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="HKLMSYSTEMCurrentControlSetControlLayouts0000409">
      <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文件中读取文件版本信息(如果这些文件包含此类信息,那么这是另一回事)。

相关内容

  • 没有找到相关文章

最新更新