我正在尝试编写一个 C# 应用程序,它应该:
- 在 .NET Framework 上运行(理想情况下为 4.0)
- 在尽可能多的计算机上运行 DirectX 9(每个安装了 DirectX 9 的人)
- 是单个 EXE 文件(没有 DLL)
- 不要强迫最终用户安装任何东西(尤其是下载)
我尝试过托管 DirectX、SharpDX,但没有成功。(我不在乎它们是否过时,我不需要 DirectX 的太多东西,只需要基础知识,它是相对简单的应用程序)。为了隐藏 DLL,我将它们嵌入到资源中并按AppDomain.AssemblyResolve
事件加载它们。
这是我的问题:
托管 DirectX。通常适用于大多数但不是所有的计算机。尽管安装了 3D 游戏(在 DirectX 上安装和运行,至少有 9 个),但有一种情况它无法正常工作。MS Managed DirectX 只是没有与 DirectX 一起安装。有谁知道为什么?为什么有些人有,有些人没有?当我将所需的 DLL 添加到应用程序的文件夹中时,它工作正常,但是当我将它们作为资源嵌入时,它们无法加载(即使我已将它们提取到临时文件夹并尝试从那里加载)。我知道如何解决这个问题,这可能可行,但我的问题是:我的托管 DirectX DLL 可以在每个 CPU 上运行吗?(32/64 位?)。我以前遇到过这种类型的问题。
夏普DX。不适用于大多数计算机,即使是现代计算机。它需要安装特定版本的 DirectX Runtime(2010 年 6 月)!如果不是,它会抛出关于丢失 d3dx9_43.dll的异常. 每个人都有 d3dx9.dll,但几乎没有 d3dx9_43.dll。安装特定版本是他们针对这个问题的官方解决方案......我不知道他们在想什么,但它就是不可用。从资源中加载它们也存在问题,但我已经设法解决了这个问题。当我从我的 32 位系统嵌入 d3dx9_43.dll 时,它在 64 位系统上抛出了 BadImageFormatException,所以我什至不能将该文件放在应用程序旁边,更不用说嵌入它或安装到它所在的 SYSTEM32 目录应该是(这将需要完全信任)。还有一个问题。即使我想附加 DirectX 2010 年 6 月最终用户运行时,它也需要 95MB,这太多了(更不用说要求用户下载它了......)。哦,我也可以
瘦身DX。甚至没有尝试过,因为在其官方主页上说它需要在最终用户计算机上安装“SlimDX Runtime”。正如我在开头所说的那样,该应用程序应该可以正常工作,而不是强迫用户安装任何东西(DirectX 本身除外,它已经安装在大多数甚至旧计算机上)。
有什么建议么?请不要再给我风滚草奖了...... :] 除了进入非托管代码和编写我自己的包装器之外,我对一切都持开放态度。