C# 在不覆盖exe文件的情况下更新游戏

C# 在不覆盖exe文件的情况下更新游戏,c#,dll,window,C#,Dll,Window,我想做的是制作一个游戏和一个更新游戏的发射器 此启动器将在不覆盖游戏的.exe文件的情况下更新游戏 我认为这是可能的使用dll,但我不知道从哪里学习这个 这是可能的吗?有很多来源可以学习如何创建dll项目 从microsoft教程开始- 从一开始就仔细考虑游戏的设计。为了使游戏更易于管理和更新,您可能希望将游戏分成核心部分,即物理、渲染等,并将其作为dll 如果以后升级渲染器,则只需交换dll,或者如您所说,使用一个启动器覆盖客户端计算机上的渲染器dll 使用dll的一些缺点是,您现在需要在游

我想做的是制作一个游戏和一个更新游戏的发射器

此启动器将在不覆盖游戏的.exe文件的情况下更新游戏

我认为这是可能的使用dll,但我不知道从哪里学习这个


这是可能的吗?

有很多来源可以学习如何创建dll项目

从microsoft教程开始-

从一开始就仔细考虑游戏的设计。为了使游戏更易于管理和更新,您可能希望将游戏分成核心部分,即物理、渲染等,并将其作为dll

如果以后升级渲染器,则只需交换dll,或者如您所说,使用一个启动器覆盖客户端计算机上的渲染器dll


使用dll的一些缺点是,您现在需要在游戏中附带更多的文件,最终用户可能会发现为自己的修改目的包装dll更容易(尽管您可能会发现使游戏可修改是一个加号?).

在我看来,您似乎希望在不修改可执行文件(无论是游戏还是其他程序)的情况下修改正在运行的进程的内存

您可以使用ReadProcessMemory和WriteProcessMemory API调用(属于kernel32.dll库)读取和写入正在运行的进程的内存。 您还需要使用OpenProcess为进程创建一个有效句柄,然后才能读取和写入其内存

根据您使用的语言,访问它们是非常简单的。在C#中,需要使用以下语法声明Dll导入:

[DllImport("kernel32.dll")]
public static extern IntPtr OpenProcess(uint dwDesiredAccess, bool bInheritHandle, int dwProcessId);

[DllImport("kernel32.dll")]
public static extern bool ReadProcessMemory(IntPtr hProcess, int lpBaseAddress, ref byte[] buffer, int size, ref int lpNumberOfBytesRead);

[DllImport("kernel32.dll")]
public static extern bool WriteProcessMemory(IntPtr hProcess, int lpBaseAddress, ref byte[] buffer, int size, ref int lpNumberOfBytesWritten);
然后使用OpenProcess获取进程句柄,并使用ReadProcessMemory和WriteProcessMemory对内存进行适当的读写操作

您可以使用诸如OLLYDBG之类的调试工具来帮助您找出要编辑的内存位置。另一个很棒的工具是ArtMoney,它允许您监控和跟踪运行过程中的值,以确定存储游戏信息的位置,如金钱、健康等


如果您需要进一步的帮助,可以添加一些关于您正在做什么的附加信息。

有可能,但是我恐怕你的问题太笼统了,在这个网站上无法回答。你必须将启动器作为一个独立的应用程序来运行,因为如果你从
Game.exe
启动它,那么.DLL已经在使用了。