我正在开发一个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)
任何帮助?
问候。
答案 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中加载文档就不会让我感到惊讶,因为它们不会自动兼容。