作为 32 位本地服务器 (.exe) 实现的 COM 对象在 64 位窗口上注册自身,默认情况下会被 WOW64 重定向 (http://msdn.microsoft.com/en-us/library/aa384253.aspx)。当客户端请求实例时,系统通常会在两个部分进行搜索,除非设置了明确的上下文标志 (CLSCTX_ACTIVATE_##_BIT_SERVER)。
因此,可以将 32 位 COM 插件(作为本地服务器实现)与 MS Office 2010 64 位一起使用。它只需要将 MSO 特定的注册表项也写入 64 位部分 (KEY_WOW64_64KEY)。
自 MS Office 2013 64 位以来,仅加载在 64 位注册表部分中注册的 COM 对象,可能是因为它仅明确请求 64 位服务器。这种限制似乎没有任何理由。 2010 年和 2013 年之间的这种变化是无意的还是有意的?
将32bit本地服务器注册到64bit部分解决了问题,但是是否符合规则? 32 位本地服务器可以在 64 位部分注册还是必须在重定向的 32 位部分?它会无视客户的意图,还是表示与 64 位客户端兼容的一种方式?
据我了解,MSO 2013 不希望支持 32 位插件,尽管在技术上是可能的。
编辑(更准确地说):我不是在问它是否有效(我知道它有效)。我对使非预期工作的技巧不感兴趣。它只是让我想到应该在 64 位部分注册哪些 COM 对象(本地服务器,也称为进程外服务器)的问题:那些在 64 位中实现的对象或那些可以被 64 位客户端使用的对象(即使它们是在 32 位中实现的) )?
编辑(更笼统):尽管我的问题将 MSO 称为实例化 COM 对象的客户端,但可以更笼统地提出这个问题。考虑一个提供自动化的应用程序,实现为 32 位 EXE。默认情况下,它的 self 注册被重定向到 Wow6432Node,但这没问题。当客户端请求一个实例时,系统无论如何都会找到它(除非客户端仅限于 64 位服务器)。因此通常也不需要注册到 64 位部分,但它是错误的(对于 32 位 EXE)吗?什么意思,有什么后果?是否有任何规则、建议……?
最佳答案
在 64 位注册表中注册 64 位代理 DLL 是完全可以的。
只是不要在 64 位注册表中注册 32 位代理 DLL。
关于windows - 在64位注册表部分注册32位本地服务器是对还是错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19222270/
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru
在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub