Word-to-Latex 2.56安装说明(关于32位和64位的问题)

  (请先阅读我写的另一篇博客 http://blog.csdn.net/pijianzhirui/article/details/50614692 )

   从官网http://www.wordtolatex.com下载名为word-to-latex-2.56.zip的压缩包,可以看见data文件夹和setup.exe,data文件夹中又有word-64和word-32两个文件夹,word-64和word-32中都有setup.exe和zdata.msi,三个setup.exe中有两个相同(CRC32:6620A422),另一个与data文件夹在一起的setup.exe不同(CRC32:5E5CA106),两个zdata.msi不相同。

Word-to-Latex 2.56安装说明(关于32位和64位的问题)_第1张图片


解压出来以后,data文件夹具有隐藏属性,需要在系统中设置“显示隐藏的文件、文件夹和驱动器”才能看见它。

  Word-to-Latex 2.56安装说明(关于32位和64位的问题)_第2张图片


现在来分析一下与data文件夹在一起的setup.exe(CRC32:5E5CA106),用JustDecompile(或.NET Reflector)打开它,展开左侧的WordToLatex.Install,首先看OfficeVersion,

  Word-to-Latex 2.56安装说明(关于32位和64位的问题)_第3张图片

Word-to-Latex 2.56安装说明(关于32位和64位的问题)_第4张图片

注意,Office的年份版本号与安装路径及注册表中的版本号存在如下对应关系,

Office 2003: 11.0
Office 2007: 12.0
Office 2010: 14.0
Office 2013: 15.0
Office 2016: 16.0
Office 2019:未知(可能是17.0)

再看Is64Bit(RegistryKey, Boolean) : Boolean
  Word-to-Latex 2.56安装说明(关于32位和64位的问题)_第5张图片

Word-to-Latex 2.56安装说明(关于32位和64位的问题)_第6张图片

OfficeVersion.OFFICE_VERSIONS = new string[] { "14.0", "15.0" };
string[] oFFICEVERSIONS = OfficeVersion.OFFICE_VERSIONS;
for (int i = 0; i < (int)oFFICEVERSIONS.Length; i++)
{ string str = oFFICEVERSIONS[i];
RegistryKey registryKey = hklm.OpenSubKey(string.Concat("Software\\Microsoft\\Office\\", str, "\\Outlook"));
if (registryKey != null)
{
  string value = (string)registryKey.GetValue("Bitness", null);
  if ((value == null ? false : value == "x64"))
  {
    flag = true;
    return flag;
  }
}

    另外,在Word-to-Latex软件的官网上可以看到它是支持Microsoft Word XP/2003/2007/2010/2013的,因为Office 2003(11.0)和Office 2007(12.0)没有64位版本,只有32位版本,从Office 2010(14.0)开始才有64位版本,(参看https://answers.microsoft.com/zh-hans/msoffice/forum/msoffice_install-mso_other-mso_2007/%e8%af%b7%e9%97%ae%e5%93%aa%e9%87%8c%e6%9c%8964/29e00394-4af6-4926-a33c-44146404f537?messageId=000b7837-0a7d-49a9-89d7-3aadbf98210a),所以OfficeVersion.OFFICE_VERSIONS = new string[] { "14.0", "15.0" };当Office版本是11.0和12.0时,registryKey = hklm.OpenSubKey(string.Concat("Software\\Microsoft\\Office\\", str, "\\Outlook"))的值就是null,不会执行if (registryKey != null){……}内部的语句,所以flag=false,函数Is64Bit的返回值是false,这对本就没有64位版的低版本Office而言是没有问题的。然而,当Office版本是16.0(或17.0)时,不论这个高版本的Office是32位还是64位,函数Is64Bit的返回值也都是false,会导致给64位的Office 2016和2019装上32位的Word-to-Latex,所以在Office 2016和2019上会出现“运行时错误‘429’:ActiveX部件不能创建对象”,错误出现在VBA代码中的Set app = CreateObject("WordToLatex.Gui.WLConvertorAddin")。

    软件作者要修复这个问题也很容易,把new string[] { "14.0", "15.0" }改成new string[] { "14.0", "15.0", "16.0", "17.0", "18.0", "19.0" },保险起见,宁可多写些版本号。而我们用户要解决这个问题也很简单,首先在“word>文件>帐户>关于word”中找到自己的word的位数。

Word-to-Latex 2.56安装说明(关于32位和64位的问题)_第7张图片

    然后在前面提到的data文件夹中,(不要双击与data文件夹在一起的setup.exe(CRC32:5E5CA106)),进入word-32或word-64文件夹(取决于你的word位数),双击里面的setup.exe(CRC32:6620A422),即可安装与word位数对应的Word-to-Latex,不再会出现运行时错误‘429’。
    不过,转换后的Latex文件中可能出现警告 W2L: warn: inserting start/end tag WordToLatex.WLFontStyle,
  Word-to-Latex 2.56安装说明(关于32位和64位的问题)_第8张图片

这应该是Word-to-Latex本身的缺陷,感兴趣的可以用JustDecompile打开Word-To-Latex安装路径(默认是C:\Program Files (x86)\Word-to-LaTeX)下的word-to-latex-lib.DLL,看看这些warn为什么会出现,我懒得分析了。

Word-to-Latex 2.56安装说明(关于32位和64位的问题)_第9张图片

你可能感兴趣的:(Word-to-Latex 2.56安装说明(关于32位和64位的问题))