Инструмент командной строки для дампа версии Windows DLL?

Вы можете использовать оконную функцию sum() over с условным FLAG

Пример

Select *
     ,Series= 1+sum(case when [DaysBetween]>60 then 1 else 0 end) over (Order by RowNo)
 From YourTable

Возвращает

[111 ]

РЕДАКТИРОВАТЬ - Версия 2008 г.

Select A.*
      ,B.*
 From  YourTable A
 Cross Apply (
               Select Series=1+sum( case when [DaysBetween]>60 then 1 else 0 end) 
                From  YourTable
                Where RowNo <= A.RowNo
             ) B
63
задан Community 23 May 2017 в 11:47
поделиться

4 ответа

Можно также посмотреть на filever.exe, который может быть загружен как часть пакета Инструментов Поддержки Windows XP SP2 - только 4.7 МБ загрузки.

9
ответ дан Franci Penov 24 November 2019 в 16:03
поделиться

Можно записать сценарий VBScript для получения информации о версии файла:

VersionInfo.vbs

set args = WScript.Arguments
Set fso = CreateObject("Scripting.FileSystemObject")
WScript.Echo fso.GetFileVersion(args(0))
Wscript.Quit

можно назвать это из командной строки как это:

cscript //nologo VersionInfo.vbs C:\Path\To\MyFile.dll
46
ответ дан Patrick Cuff 24 November 2019 в 16:03
поделиться

или можно создать тот сами. Откройте VS, создайте новое консольное приложение. Создайте простой проект без ATL или поддержки MFC, оставьте stdafx опцию проверенной, но не проверяйте 'пустой проект' и называйте это VersionInfo.

Вы получите простой проект с 2 файлами: VersionInfo.cpp и VersionInfo.h

Открывают cpp файл и вставляют следующее в него, затем компилируют. Вы будете в состоянии выполнить его, первым аргументом является полное имя файла, это распечатает "продукт: 5.6.7.8 Файл: 1.2.3.4" на основе блока ресурса Версии. Если не будет никакого ресурса версии, то это возвратится-1, иначе 0.

Компиляции к 8k двоичному файлу с помощью dll CRT, 60k со всем связанным статически (набор в опциях C++, изменение "Страница Code Generation, опции Runtime" к "/MT")

HTH.

пз. Если Вы не захотите использовать Visual Studio, то она все еще скомпилирует использование любого компилятора C++ (скрещенные пальцы), но необходимо будет почти наверняка измениться, #pragma - просто определяют что lib в настройках компоновщика вместо этого, прагма просто стенография для автоматического соединения с той библиотекой.

<час>
// VersionInfo.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <windows.h>

#pragma comment(lib, "version.lib")

int _tmain(int argc, _TCHAR* argv[])
{
    DWORD handle = 0;
    DWORD size = GetFileVersionInfoSize(argv[1], &handle);
    BYTE* versionInfo = new BYTE[size];
    if (!GetFileVersionInfo(argv[1], handle, size, versionInfo))
    {
        delete[] versionInfo;
        return -1;
    }
    // we have version information
    UINT    len = 0;
    VS_FIXEDFILEINFO*   vsfi = NULL;
    VerQueryValue(versionInfo, L"\\", (void**)&vsfi, &len);

    WORD fVersion[4], pVersion[4];
    fVersion[0] = HIWORD(vsfi->dwFileVersionMS);
    fVersion[1] = LOWORD(vsfi->dwFileVersionMS);
    fVersion[2] = HIWORD(vsfi->dwFileVersionLS);
    fVersion[3] = LOWORD(vsfi->dwFileVersionLS);
    pVersion[0] = HIWORD(vsfi->dwProductVersionMS);
    pVersion[1] = LOWORD(vsfi->dwProductVersionMS);
    pVersion[2] = HIWORD(vsfi->dwProductVersionLS);
    pVersion[3] = LOWORD(vsfi->dwProductVersionLS);

    printf("Product: %d.%d.%d.%d File: %d.%d.%d.%d\n", 
        pVersion[0], pVersion[1], 
        pVersion[2], pVersion[3], 
        fVersion[0], fVersion[1], 
        fVersion[2], fVersion[3]);
    delete[] versionInfo;

    return 0;
}
10
ответ дан gbjbaanb 24 November 2019 в 16:03
поделиться

Use Microsoft Sysinternals Sigcheck. This sample outputs just the version:

sigcheck -q -n foo.dll

Unpacked sigcheck.exe is only 228 KB.

58
ответ дан 24 November 2019 в 16:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: