当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《读取应用程序的清单文件?》经验,为你挑选了4个好方法。

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

我在考虑备用数据流的思路?



1> Roger Lipsco..:

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


这有点不正确(帮助有误导性).通常.exes在资源#1中具有嵌入式清单,而.dll在资源#2中具有清单.无论如何,如果在#1中没有找到清单资源,请检查#2而不是假设它不存在.

2> bk1e..:

您可以使用命令行清单工具提取/替换/合并/验证清单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中找到了该工具


`-out:con`输出到控制台:)

3> 小智..:

在记事本中打开该文件.事情是纯文本.

屏幕抓取


大声笑这也适用于Linux或bsd中的'less'命令。谢谢

4> jeffm..:

有可用的清单查看器工具在这里 -我不知道,如果作者将提供源代码.

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有