有没有一种简单的方法来读取应用程序已嵌入的清单文件?
我在考虑备用数据流的思路?
Windows清单文件是Win32资源.换句话说,它们嵌入到EXE或DLL的末尾.您可以使用LoadLibraryEx,FindResource,LoadResource和LockResource来加载嵌入的资源.
这是一个提取自己的清单的简单例子......
BOOL CALLBACK EnumResourceNameCallback(HMODULE hModule, LPCTSTR lpType, LPWSTR lpName, LONG_PTR lParam) { HRSRC hResInfo = FindResource(hModule, lpName, lpType); DWORD cbResource = SizeofResource(hModule, hResInfo); HGLOBAL hResData = LoadResource(hModule, hResInfo); const BYTE *pResource = (const BYTE *)LockResource(hResData); TCHAR filename[MAX_PATH]; if (IS_INTRESOURCE(lpName)) _stprintf_s(filename, _T("#%d.manifest"), lpName); else _stprintf_s(filename, _T("%s.manifest"), lpName); FILE *f = _tfopen(filename, _T("wb")); fwrite(pResource, cbResource, 1, f); fclose(f); UnlockResource(hResData); FreeResource(hResData); return TRUE; // Keep going } int _tmain(int argc, _TCHAR* argv[]) { const TCHAR *pszFileName = argv[0]; HMODULE hModule = LoadLibraryEx(pszFileName, NULL, LOAD_LIBRARY_AS_DATAFILE); EnumResourceNames(hModule, RT_MANIFEST, EnumResourceNameCallback, NULL); FreeLibrary(hModule); return 0; }
或者,您可以使用Windows SDK中的MT.EXE:
>mt -inputresource:dll_with_manifest.dll;#1 -out:extracted.manifest
您可以使用命令行清单工具提取/替换/合并/验证清单mt.exe
,该工具是Windows SDK的一部分:
C:\Program Files\Microsoft SDKs\Windows\v6.1>mt /? Microsoft (R) Manifest Tool version 5.2.3790.2075 ... > To extract manifest out of a dll: mt.exe -inputresource:dll_with_manifest.dll;#1 -out:extracted.manifest
编辑:我在C:\ Program Files\Microsoft SDKs\Windows\v6.1\bin中找到了该工具
在记事本中打开该文件.事情是纯文本.
有可用的清单查看器工具在这里 -我不知道,如果作者将提供源代码.