【发布时间】:2017-06-11 20:20:09
【问题描述】:
我们有一个 32 位和 64 位的软件,它调用我们的 exe 并将事件传递给它(就像一个插件)。
问题是我们的 exe 必须以与调用软件相同的位数(x86/x64)执行(如果软件以 32 位版本运行,我们的 exe 必须以 32 位运行,如果软件以 64 位运行版本我们的 exe 必须以 64 位运行)。 windows版本为64位,但客户端可以运行32位或64位版本的软件。
在 Visual Studio(2015) 中,Target AnyCPU 选项仅取决于 windows 版本(+ 首选 32 位复选框),但我们需要依赖于调用软件进程。
有没有我们可以实现的选项或解决方案,而不是编译到每个平台(x86 和 x64)?
【问题讨论】:
-
“调用我们的 exe”没有什么意义。插件总是作为 DLL 加载,该文件具有 .exe 文件扩展名在 .NET 中无关紧要。任何 DLL 都需要符合启动可执行文件选择的位数。插件场景中的宿主进程。通过选择“AnyCPU”作为目标并不选中“首选 32 位”复选框,在 C# 中很容易完成。你真的试过吗?
-
对不起,如果我解释错了。在这种情况下,软件显式运行ourapp.exe(是它自己的进程而不是插件),因此有两个独立的进程:software.exe 和ourapp.exe基于它正在运行的窗口的位数(逻辑上如文档所示),但我们想要一些选项,将其位数基于调用我们的 exe 的进程(引导样式?)
-
您对software.exe有任何控制权吗?能否为ourapp.exe创建一个32bitWrapper和一个64BitWrapper,让software.exe任意启动?
-
根据我的经验,“首选 32 位”实际上意味着“强制 32 位”。我从来没有喜欢在 64 位模式下运行的 32 位应用程序。也许是这样,但根据我的经验不是。
标签: c# visual-studio-2015 x86 target-platform anycpu