2010-02-18 67 views
6

我正在使用Windows脚本主机的某种安装程序应用程序,我在它的开始菜单中创建快捷方式。当我切换到x64环境(win7终极x64 + vs2010)时出现了这个问题使用Windows脚本主机

我添加了对Windows脚本宿主对象模型的引用(来自c:\ windows \ syswow64 \ wshom.ocx),它生成了Interop.IWshRuntimeLibrary DLL。

我加'使用IWshRuntimeLibrary;'我的.cs文件,但是当我试图创建

WshShell sh = new WshShellClass(); 

它抛出一个异常:

无法加载文件或程序集“Interop.IWshRuntimeLibrary,版本= 1.0.0.0,文化=中性,PublicKeyToken = null'或它的一个依赖关系。试图加载格式不正确的程序。

我认为我需要64位版本的wshom.ocx才能工作,但我不知道该怎么办。

或者我只是转储Windows脚本的东西,但我需要另一种方式来创建.net应用程序的开始菜单快捷方式。

回答

6

看来,.NET需要所有程序集都是相同的32位或64位,并且不会让你混搭。因此,如果您的应用程序使用32位,则应该尝试设置编译器选项(在项目属性中)以显式生成“x86”(即32位)应用程序(应该在32位和64位上运行位)。这可能比追踪64位版本的脚本主机更容易。

请注意,默认的编译器选项似乎是“Any”,它将在64位操作系统上运行.NET程序集为64位,在32位操作系统上运行32位。

+1

+1 Andy Andy nice work。在x64上运行时,当从VS 2008升级到VS 2010时,我遇到了同样的问题。即使VS 2008和VS 2010版本都构建为'AnyCPU',但只有VS 2008版本可以正常运行。切换VS 2010版本到'x86'确实修复它,谢天谢地。神秘的事实仍然证明,为什么VS 2008版本在我的x64机器上正确运行时瞄准'AnyCPU',但我很高兴它现在正在运行。谢谢安迪! – 2010-05-08 14:27:07

+0

不知道为什么会发生这种情况。获得同样的问题。我需要“AnyCPU”才能工作。 – 2012-09-11 20:16:38