2

我正在尝试更新 win mobile 6.0 项目以使其具有更新通知。

为了让我们更容易做到这一点,我希望能够通过 Web 界面更新安装程序 CAB 文件,并让 Web 自动确定应用程序的版本。

在 .net 中,我知道确定文件版本的方法是:

FileVersionInfo.GetVersionInfo

但由于文件在 CAB 中,而 CAB 没有版本,我无法确定版本。

我也知道有一个 extract.exe 工具可以提取 CAB 内容,但它的提取方式与将 CAB 安装在设备上时的提取方式不同。例如,exe文件是这样提取的: APPEXENAME~1.026

我无法从中获取文件版本。另外,我什至不知道哪个文件是“.exe”,因为所有文件都以“APPEXENAME”开头。

我想要做的甚至可能吗?还是每次更新时都必须手动输入版本号?

4

1 回答 1

1

虽然这是一个很老的问题,但这里有一个答案:

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="HKLM\SYSTEM\CurrentControlSet\Control\Layouts\00000409">
      <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="HKLM\Software\Microsoft\Terminal 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="\Windows\MvkLib.dll" datatype="string"/>
    </characteristic>
    <characteristic type="HKLM\SYSTEM\GWE">
      <parm name="LoadRdp" value="1" datatype="integer"/>
    </characteristic>
    <characteristic type="HKLM\System\StorageManager\AutoLoad\FilterFsd">
      <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 文件中读取文件版本信息(如果这些文件包含此类信息,那么这是不同的点)。

于 2014-02-08T18:35:27.077 回答