Вы можете использовать оконную функцию 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
Можно также посмотреть на filever.exe, который может быть загружен как часть пакета Инструментов Поддержки Windows XP SP2 - только 4.7 МБ загрузки.
Можно записать сценарий 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
или можно создать тот сами. Откройте 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;
}
Use Microsoft Sysinternals Sigcheck. This sample outputs just the version:
sigcheck -q -n foo.dll
Unpacked sigcheck.exe is only 228 KB.