我想要做的事实上是非常基本的,但我找不到合适的切入点。 我有一个可执行文件(不是CLR),我想在文件的资源中添加(以后读取)一些文本。
到目前为止,我发现PeNet用于枚举PE标头,MSDN article用C方法修改资源。但是这需要我将一个字符串压缩成一个资源?...
修改 使用this sample我尝试更改资源,但在运行代码后,我丢失了可执行文件的内容。
这是我到目前为止使用的代码:
[DllImport("kernel32.dll", SetLastError = true)]
public static extern IntPtr BeginUpdateResource(string pFileName, [MarshalAs(UnmanagedType.Bool)]bool bDeleteExistingResources);
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool UpdateResource(IntPtr hUpdate, uint lpType, uint lpName, ushort wLanguage, byte[] lpData, uint cbData);
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool EndUpdateResource(IntPtr hUpdate, bool fDiscard);
var path = @"c:\temp\some.exe";
var arr = Encoding.UTF8.GetBytes("this is my text");
IntPtr ipTarget = BeginUpdateResource(outPath, false);
if (UpdateResource(ipTarget, 6/*RT_STRING*/, 1234/*some name*/, 1033, arr, (uint)arr.Length))
{
EndUpdateResource(ipTarget, false);
}