Что состоит в том, чтобы сказать надежный путь, какая версия (версии).NET установлены на производственном Windows Server?

try...catch блоки, как правило, рекомендуется использовать меньше, и это не зависит от языка, который вы используете.

Основной причиной этого является стоимость catch блоков. Еще одна причина заключается в том, что когда вы заключаете много операторов в один блок try...catch, в блоке catch вы не можете быть уверены, в чем именно заключается основная проблема.

Лучше использовать методы, такие как проверка входных данных или блоки if...else, чтобы уменьшить вероятность возникновения исключения (ошибки). Например, если вы хотите работать с номером, который взят у пользователя, вместо использования try...catch, вы можете использовать:

if (isNaN(numberVariable))
{
    alert('you should enter a valid number');
}
99
задан Tom Kidd 26 September 2008 в 14:44
поделиться

3 ответа

Согласно ответу CodeTrawler , решение состоит в том, чтобы ввести следующее в окно проводника:

% systemroot% \ Microsoft.NET \ Framework

Затем выполните поиск для:

Mscorlib.dll

... и щелкните правой кнопкой мыши / перейдите на вкладку версии для каждого результата.

15
ответ дан 24 November 2019 в 05:05
поделиться

Как ни странно, я написал код, чтобы сделать это еще раз, когда вышла версия 1.1 (что это было, семь лет назад?), И немного подправил его, когда версия 2.0 вышел. Я не смотрел на это годами, так как мы больше не управляем нашими серверами.

Это не надежно, но я все равно публикую его, потому что считаю это забавным; в том, что это проще сделать в .NET и еще проще - в оболочке Power.

bool GetFileVersion(LPCTSTR filename,WORD *majorPart,WORD *minorPart,WORD *buildPart,WORD *privatePart)
{
    DWORD dwHandle;
    DWORD dwLen = GetFileVersionInfoSize(filename,&dwHandle);
    if (dwLen) {
        LPBYTE lpData = new BYTE[dwLen];
        if (lpData) {
            if (GetFileVersionInfo(filename,0,dwLen,lpData)) {
                UINT uLen;  
                VS_FIXEDFILEINFO *lpBuffer;  
                VerQueryValue(lpData,_T("\\"),(LPVOID*)&lpBuffer,&uLen);  
                *majorPart = HIWORD(lpBuffer->dwFileVersionMS);
                *minorPart = LOWORD(lpBuffer->dwFileVersionMS);
                *buildPart = HIWORD(lpBuffer->dwFileVersionLS);
                *privatePart = LOWORD(lpBuffer->dwFileVersionLS);
                delete[] lpData;
                return true;
            }
        }
    }
    return false;
}

int _tmain(int argc,_TCHAR* argv[])
{
    _TCHAR filename[MAX_PATH];
    _TCHAR frameworkroot[MAX_PATH];
    if (!GetEnvironmentVariable(_T("systemroot"),frameworkroot,MAX_PATH))
        return 1;
    _tcscat_s(frameworkroot,_T("\\Microsoft.NET\\Framework\\*"));
    WIN32_FIND_DATA FindFileData;
    HANDLE hFind = FindFirstFile(frameworkroot,&FindFileData);
    if (hFind == INVALID_HANDLE_VALUE)
        return 2;
    do {
        if ((FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&
            _tcslen(FindFileData.cAlternateFileName) != 0) {
            _tcsncpy_s(filename,frameworkroot,_tcslen(frameworkroot)-1);
            filename[_tcslen(frameworkroot)] = 0;
            _tcscat_s(filename,FindFileData.cFileName);
            _tcscat_s(filename,_T("\\mscorlib.dll"));
            WORD majorPart,minorPart,buildPart,privatePart;
            if (GetFileVersion(filename,&majorPart,&minorPart,&buildPart,&privatePart )) {
                _tprintf(_T("%d.%d.%d.%d\r\n"),majorPart,minorPart,buildPart,privatePart);
            }
        }
    } while (FindNextFile(hFind,&FindFileData) != 0);
    FindClose(hFind);
    return 0;
}
0
ответ дан 24 November 2019 в 05:05
поделиться

Также см. Вопрос о переполнении стека Как определить, какие версии .NET Framework и пакеты обновления установлены? , в котором также упоминается:

Есть официальный ответ Microsoft на этот вопрос в статье базы знаний [Как определить, какие версии и уровни пакетов обновления Microsoft .NET Framework установлены] [2]

Идентификатор статьи: 318785 - Последняя проверка: 7 ноября 2008 г. - Версия : 20.1 Как определить, какие версии .NET Framework установлены и были ли применены пакеты обновления.

К сожалению, похоже, что это не работает, потому что версия mscorlib.dll в каталоге 2.0 имеет версию 2.0, и нет версии mscorlib.dll ни в одном из них. каталоги 3.0 или 3.5, даже если установлен 3.5 SP1 ... Почему официальный ответ Microsoft может быть настолько дезинформирован?

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

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