c – 读取应用程序的清单文件?

有一个简单的方法来读取应用程序已经嵌入的清单文件?

我正在考虑一个替代数据流的线路?

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
http://stackoverflow.com/questions/420852/reading-an-applications-manifest-file

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c – 读取应用程序的清单文件?