为64位系统创建安装程序时出现问题

时间:2011-05-12 10:31:24

标签: c# vsto x86-64

我正在开发一个c#+ vsto项目。我们使用vsto创建和验证excel模板。 我最近发现了一件有趣的事情。

在32位系统上,软件安装在

  

C:\ Program Files

但在64位系统上, 它安装在

  

C:\ Program Files(x86)

当我尝试

案例I: 在64位系统上打开excel文件(在32位系统上创建)。

案例二: 在32位系统上打开excel文件(在64位系统上创建)

我在系统上遇到异常。

这是因为各个DLL存储在不同的位置。

因为32位指的是

  

C:\ Program Files

和64位指的是

  

C:\ Program Files(x86)

有什么方法可以强制安装程序在64位系统的 C:\ Program Files 中安装软件,而不是将其安装在 C:\ Program Files(x86)

任何帮助?

问候。

3 个答案:

答案 0 :(得分:2)

惯例是在64位系统上将{32}软件安装到Program Files (x86)。我认为您不想将您的32位软件安装到Program Files - 这将违背细则。

至于解决方案是什么,我想知道为什么Excel认为你的DLL安装在Program Files中。您是否有可能在某处使用硬编码路径?


从您的评论到这个答案,确实看起来您正在对安装路径进行硬编码。这听起来好像在很多方面都是个问题。您已经发现了64位操作系统问题,但是如果您的用户的系统驱动器是D怎么办?如果他们有Windows的本地化版本怎么办?例如,在德国,程序文件文件夹通常为C:\Programme

从我可以收集的有关如何部署VSTO加载项的内容中,您只需编写一堆注册表项,其中包含DLL所在位置的详细信息。我的猜测是,您目前的位置是硬编码的,您需要根据用户在安装VSTO时选择的位置更改安装程序以编写位置。

答案 1 :(得分:0)

我不确定我是否完全理解了这个问题,但是你不能只使用System.Environment.Is64BitOperatingSystem来查看这是否是64位操作系统?

答案 2 :(得分:0)

从此评论....

  

当我在32上安装我的应用程序时   位系统并生成模板   存储DLL中的路径   模板,但当我尝试打开它   它在64位系统上的excel模板   搜索存在的DLL引用   在程序文件中,但DLL是   存在于程序文件(x86)中   文件夹,我希望得到一个例外   现在很清楚。

听起来好像你还没有正确使用VSTO,虽然可能有一些我不知道的用法。

使用典型的VSTO插件,插件在EXCEL“Addins”键下注册。无论是64位还是32位都没关系,您仍然只能注册一个(这是适用的)。

加载Excel时会加载插件,而不是在加载特定模板时加载。

加载模板时,插件通常监视doc加载,然后根据需要做出反应。

我相信你可以使用VSTO构建一个“每个文档”类型的插件,但是如果你这样做,那么Excel根本不会在不同的安装类型的Excel中加载文档就不会让我感到惊讶,因为它们不会自动兼容。