|
|
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// File: fuslogvw.c
//
// Contents:
//
// Classes:
//
// Functions:
//
// History: 25 Mar 97 t-alans (Alan Shi) Created
// 12 Jan 00 AlanShi (Alan Shi) Copied from cdllogvw
// 30 May 00 AlanShi (Alan Shi) Modified to show date/time
// 01 Dec 00 AlanShi (Alan Shi) Added application name field
//
//----------------------------------------------------------------------------
#include <windows.h>
#include <shlwapi.h>
#include <shellapi.h>
#include <wininet.h>
#include <commctrl.h>
#include "cdlids.h"
#include "wininet.h"
#define URL_SEARCH_PATTERN "?ClickOnceErrorLog!exe="
#define FILESPEC_SEARCH_PATTERN TEXT("?ClickOnceErrorLog!exe=")
#define DELIMITER_CHAR '!'
#define MAX_CACHE_ENTRY_INFO_SIZE 2048
#define MAX_DATE_LEN 64
#define MAX_RES_TEXT_LEN 1024
#define XSP_APP_CACHE_DIR TEXT("Temporary ASP.NET Files")
#define XSP_FUSION_LOG_DIR TEXT("Bind Logs")
#define REG_KEY_FUSION_SETTINGS TEXT("Software\\Microsoft\\Fusion\\Installer\\1.0.0.0\\")
#define REG_VAL_FUSION_LOG_PATH TEXT("LogPath")
#define REG_VAL_FUSION_LOG_FAILURES TEXT("LogFailures")
#define PAD_DIGITS_FOR_STRING(x) (((x) > 9) ? TEXT("") : TEXT("0"))
typedef enum tagLogLocation { LOG_DEFAULT, LOG_XSP, LOG_CUSTOM } LogLocation;
LogLocation g_LogLocation; TCHAR g_szCustomLogPath[MAX_PATH]; TCHAR g_szXSPLogPath[MAX_PATH]; HINSTANCE g_hInst;
typedef HRESULT(*PFNGETCORSYSTEMDIRECTORY)(LPWSTR, DWORD, LPDWORD);
LRESULT CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM); void ViewLogEntry(HWND hwnd); void RefreshLogView(HWND hwnd, LogLocation logLocation); void RefreshCustomView(HWND hwnd, LPCTSTR szPath); void RefreshWininetView(HWND hwnd); void DeleteLogEntry(HWND hwnd); void DeleteAllLogs(HWND hwnd); void FormatDateBuffer(FILETIME *pftLastMod, LPSTR szBuf); void InitListView(HWND hwndLV); void InitText(HWND hwnd); void AddLogItem(HWND hwndLV, LPINTERNET_CACHE_ENTRY_INFO pCacheEntryInfo); void AddLogItemCustom(HWND hwndLV, WIN32_FIND_DATA *pfindData); void InitCustomLogPaths(); BOOL InsertCustomLogEntry(LPTSTR szFilePath, HWND hwndLV); BOOL GetCorSystemDirectory(LPTSTR szCorSystemDir);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { g_hInst = hInstance; DialogBox(hInstance, MAKEINTRESOURCE(IDD_CDLLOGVIEW), NULL, DlgProc);
return 0; }
LRESULT CALLBACK DlgProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { HWND hwndLV; HWND hwndRBDefault; LPNMHDR pnmh = NULL; LONG lResult; LONG lState; HKEY hkey; DWORD dwLogFailures = 0; DWORD dwSize; DWORD dwType;
switch (iMsg) { case WM_INITDIALOG: hwndLV = GetDlgItem(hwnd, IDC_LV_LOGMESSAGES); InitListView(hwndLV);
hwndRBDefault = GetDlgItem(hwnd, IDC_RADIO_DEFAULT); SendMessage(hwndRBDefault, BM_SETCHECK, BST_CHECKED, 0);
g_LogLocation = LOG_DEFAULT;
InitCustomLogPaths(); InitText(hwnd);
RefreshLogView(hwnd, g_LogLocation);
lResult = RegOpenKeyEx(HKEY_CURRENT_USER, REG_KEY_FUSION_SETTINGS, 0, KEY_READ, &hkey); if (lResult == ERROR_SUCCESS) { dwSize = sizeof(DWORD); lResult = RegQueryValueEx(hkey, REG_VAL_FUSION_LOG_FAILURES, NULL, &dwType, (LPBYTE)&dwLogFailures, &dwSize); RegCloseKey(hkey); }
if (dwLogFailures) { SendMessage(GetDlgItem(hwnd, IDC_CB_ENABLELOG), BM_SETCHECK, 1, 0); } else { SendMessage(GetDlgItem(hwnd, IDC_CB_ENABLELOG), BM_SETCHECK, 0, 0); }
// Test for read/write access, and grey out if can't change
lResult = RegOpenKeyEx(HKEY_CURRENT_USER, REG_KEY_FUSION_SETTINGS, 0, KEY_ALL_ACCESS, &hkey); if (lResult == ERROR_SUCCESS) { RegCloseKey(hkey); } else { EnableWindow(GetDlgItem(hwnd, IDC_CB_ENABLELOG), FALSE); }
return TRUE;
case WM_COMMAND: switch (LOWORD(wParam)) { case IDCANCEL: EndDialog(hwnd, 0); break; case IDC_CB_VIEWLOG: ViewLogEntry(hwnd); break;
case IDC_CB_REFRESH: RefreshLogView(hwnd, g_LogLocation); break;
case IDC_CB_DELETE: DeleteLogEntry(hwnd); break;
case IDC_CB_DELETE_ALL: DeleteAllLogs(hwnd); break;
case IDC_RADIO_DEFAULT: if (g_LogLocation == LOG_DEFAULT) { // No change
break; }
g_LogLocation = LOG_DEFAULT; RefreshLogView(hwnd, g_LogLocation);
break;
case IDC_RADIO_XSP: if (g_LogLocation == LOG_XSP) { // No change
break; }
g_LogLocation = LOG_XSP; RefreshLogView(hwnd, g_LogLocation); break;
case IDC_RADIO_CUSTOM: if (g_LogLocation == LOG_CUSTOM) { // No change
break; }
g_LogLocation = LOG_CUSTOM; RefreshLogView(hwnd, g_LogLocation); break; /*
case IDC_CB_ENABLELOG: lResult = RegOpenKeyEx(HKEY_CURRENT_USER, REG_KEY_FUSION_SETTINGS, 0, KEY_ALL_ACCESS, &hkey); if (lResult == ERROR_SUCCESS) { lState = SendMessage(GetDlgItem(hwnd, IDC_CB_ENABLELOG), BM_GETCHECK, 0, 0); dwLogFailures = (lState == BST_CHECKED) ? (1) : (0);
RegSetValueEx(hkey, REG_VAL_FUSION_LOG_FAILURES, 0, REG_DWORD, (BYTE*)&dwLogFailures, sizeof(dwLogFailures));
RegCloseKey(hkey); } break; */ }
return TRUE;
case WM_NOTIFY: if (wParam == IDC_LV_LOGMESSAGES) { pnmh = (LPNMHDR)lParam;
if (pnmh->code == LVN_ITEMACTIVATE) { // Double click (or otherwise activated)
ViewLogEntry(hwnd); } }
return TRUE; }
return FALSE; }
void DeleteLogEntry(HWND hwnd) { LPINTERNET_CACHE_ENTRY_INFO pCacheEntryInfo = NULL; DWORD dwBufferSize = MAX_CACHE_ENTRY_INFO_SIZE; HWND hwndLV; LRESULT lIndex = 0; LRESULT lLength = 0; static char pBuffer[MAX_CACHE_ENTRY_INFO_SIZE]; char szUrl[INTERNET_MAX_URL_LENGTH]; char szDispNameBuf[INTERNET_MAX_URL_LENGTH]; char szEXEBuf[MAX_PATH];
hwndLV = GetDlgItem(hwnd, IDC_LV_LOGMESSAGES); lIndex = ListView_GetSelectionMark(hwndLV);
ListView_GetItemText(hwndLV, lIndex, 0, szEXEBuf, MAX_PATH); ListView_GetItemText(hwndLV, lIndex, 2, szDispNameBuf, INTERNET_MAX_URL_LENGTH);
if (g_LogLocation == LOG_DEFAULT) { wnsprintf(szUrl, INTERNET_MAX_URL_LENGTH, "%s%s!name=%s", URL_SEARCH_PATTERN, szEXEBuf, szDispNameBuf); pCacheEntryInfo = (LPINTERNET_CACHE_ENTRY_INFO)pBuffer; dwBufferSize = MAX_CACHE_ENTRY_INFO_SIZE; if (DeleteUrlCacheEntry(szUrl)) { RefreshLogView(hwnd, g_LogLocation); } else { MessageBox(hwnd, "Error: Unable to delete cache file!", "Log View Error", MB_OK | MB_ICONERROR); } } else { wnsprintf(szUrl, INTERNET_MAX_URL_LENGTH, "%s\\%s\\%s%s!name=%s.htm", ((g_LogLocation == LOG_XSP) ? (g_szXSPLogPath) : (g_szCustomLogPath)), szEXEBuf, FILESPEC_SEARCH_PATTERN, szEXEBuf, szDispNameBuf); if (!DeleteFile(szUrl)) { MessageBox(hwnd, "Error: Unable to delete cache file!", "Log View Error", MB_OK | MB_ICONERROR); }
RefreshLogView(hwnd, g_LogLocation); } }
void DeleteAllLogs(HWND hwnd) { HWND hwndLV; char szDispNameBuf[INTERNET_MAX_URL_LENGTH]; char szEXEBuf[MAX_PATH]; char szUrl[INTERNET_MAX_URL_LENGTH]; int iCount; int i;
hwndLV = GetDlgItem(hwnd, IDC_LV_LOGMESSAGES);
iCount = ListView_GetItemCount(hwndLV); for (i = 0; i < iCount; i++) { ListView_GetItemText(hwndLV, i, 0, szEXEBuf, MAX_PATH); ListView_GetItemText(hwndLV, i, 2, szDispNameBuf, INTERNET_MAX_URL_LENGTH); if (g_LogLocation == LOG_DEFAULT) { wnsprintf(szUrl, INTERNET_MAX_URL_LENGTH, "%s%s!name=%s", URL_SEARCH_PATTERN, szEXEBuf, szDispNameBuf); DeleteUrlCacheEntry(szUrl); } else { wnsprintf(szUrl, INTERNET_MAX_URL_LENGTH, "%s\\%s\\%s%s!name=%s.htm", ((g_LogLocation == LOG_XSP) ? (g_szXSPLogPath) : (g_szCustomLogPath)), szEXEBuf, FILESPEC_SEARCH_PATTERN, szEXEBuf, szDispNameBuf); if (!DeleteFile(szUrl)) { MessageBox(hwnd, "Error: Unable to delete cache file!", "Log View Error", MB_OK | MB_ICONERROR); } } }
RefreshLogView(hwnd, g_LogLocation); }
void ViewLogEntry(HWND hwnd) { LRESULT lIndex = 0; LRESULT lLength = 0; HWND hwndLV; DWORD dwBufferSize = MAX_CACHE_ENTRY_INFO_SIZE; LPINTERNET_CACHE_ENTRY_INFO pCacheEntryInfo = NULL; char szUrl[INTERNET_MAX_URL_LENGTH]; char szDispNameBuf[INTERNET_MAX_URL_LENGTH]; char szEXEBuf[MAX_PATH]; static char pBuffer[MAX_CACHE_ENTRY_INFO_SIZE];
hwndLV = GetDlgItem(hwnd, IDC_LV_LOGMESSAGES);
lIndex = ListView_GetSelectionMark(hwndLV); ListView_GetItemText(hwndLV, lIndex, 0, szEXEBuf, MAX_PATH); ListView_GetItemText(hwndLV, lIndex, 2, szDispNameBuf, INTERNET_MAX_URL_LENGTH); if (g_LogLocation == LOG_DEFAULT) { wnsprintf(szUrl, INTERNET_MAX_URL_LENGTH, "%s%s!name=%s", URL_SEARCH_PATTERN, szEXEBuf, szDispNameBuf); pCacheEntryInfo = (LPINTERNET_CACHE_ENTRY_INFO)pBuffer; dwBufferSize = MAX_CACHE_ENTRY_INFO_SIZE; if (GetUrlCacheEntryInfo(szUrl, pCacheEntryInfo, &dwBufferSize)) { if (pCacheEntryInfo->lpszLocalFileName != NULL) { if (ShellExecute(NULL, "open", pCacheEntryInfo->lpszLocalFileName, NULL, NULL, SW_SHOWNORMAL ) <= (HINSTANCE)32) { // ShellExecute returns <= 32 if error occured
MessageBox(hwnd, TEXT("Error: Unable to open cache file!"), TEXT("Log View Error"), MB_OK | MB_ICONERROR); } } else { MessageBox(hwnd, TEXT("Error: No file name available!"), TEXT("Log View Error"), MB_OK | MB_ICONERROR); } } } else { wnsprintf(szUrl, INTERNET_MAX_URL_LENGTH, "%s\\%s\\%s%s!name=%s.htm", ((g_LogLocation == LOG_XSP) ? (g_szXSPLogPath) : (g_szCustomLogPath)), szEXEBuf, FILESPEC_SEARCH_PATTERN, szEXEBuf, szDispNameBuf);
if (ShellExecute(NULL, "open", szUrl, NULL, NULL, SW_SHOWNORMAL ) <= (HINSTANCE)32) { // ShellExecute returns <= 32 if error occured
MessageBox(hwnd, TEXT("Error: Unable to open cache file!"), TEXT("Log View Error"), MB_OK | MB_ICONERROR); } } }
void RefreshLogView(HWND hwnd, LogLocation logLocation) { HWND hwndLV;
hwndLV = GetDlgItem(hwnd, IDC_LV_LOGMESSAGES);
switch (logLocation) { case LOG_DEFAULT: RefreshWininetView(hwnd); break;
case LOG_XSP: if (lstrlen(g_szXSPLogPath)) { RefreshCustomView(hwnd, g_szXSPLogPath); } else { ListView_DeleteAllItems(hwndLV); }
break;
case LOG_CUSTOM: if (lstrlen(g_szCustomLogPath)) { RefreshCustomView(hwnd, g_szCustomLogPath); } else { hwndLV = GetDlgItem(hwnd, IDC_LV_LOGMESSAGES); ListView_DeleteAllItems(hwndLV); } break; } }
void RefreshCustomView(HWND hwnd, LPCTSTR szPath) { HANDLE hFile = INVALID_HANDLE_VALUE; TCHAR szSearchSpec[MAX_PATH]; TCHAR szFileName[MAX_PATH]; HWND hwndLV; WIN32_FIND_DATA findData;
hwndLV = GetDlgItem(hwnd, IDC_LV_LOGMESSAGES); ListView_DeleteAllItems(hwndLV);
#ifdef UNICODE
wnsprintfW(szSearchSpec, MAX_PATH, L"%ws\\*.*", szPath); #else
wnsprintfA(szSearchSpec, MAX_PATH, "%s\\*.*", szPath); #endif
hFile = FindFirstFile(szSearchSpec, &findData); if (hFile == INVALID_HANDLE_VALUE) { goto Exit; }
if ((findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && (lstrcmp(findData.cFileName, TEXT("."))) && (lstrcmp(findData.cFileName, TEXT("..")))) {
#ifdef UNICODE
wnsprintfW(szFileName, MAX_PATH, L"%ws\\%ws", szPath, findData.cFileName); #else
wnsprintfA(szFileName, MAX_PATH, "%s\\%s", szPath, findData.cFileName); #endif
InsertCustomLogEntry(szFileName, hwndLV); }
while (FindNextFile(hFile, &findData)) { if ((findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && (lstrcmp(findData.cFileName, TEXT("."))) && (lstrcmp(findData.cFileName, TEXT("..")))) { #ifdef UNICODE
wnsprintfW(szFileName, MAX_PATH, L"%ws\\%ws", szPath, findData.cFileName); #else
wnsprintfA(szFileName, MAX_PATH, "%s\\%s", szPath, findData.cFileName); #endif
InsertCustomLogEntry(szFileName, hwndLV); } }
Exit: return; }
BOOL InsertCustomLogEntry(LPTSTR szFilePath, HWND hwndLV) { BOOL bRet = TRUE; HANDLE hFile = INVALID_HANDLE_VALUE; TCHAR szSearchSpec[MAX_PATH]; WIN32_FIND_DATA findData;
#ifdef UNICODE
wnsprintfW(szSearchSpec, MAX_PATH, L"%ws\\*.htm" szFilePath); #else
wnsprintfA(szSearchSpec, MAX_PATH, "%s\\*.htm", szFilePath); #endif
hFile = FindFirstFile(szSearchSpec, &findData); if (hFile == INVALID_HANDLE_VALUE) { bRet = FALSE; goto Exit; }
if (!(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { AddLogItemCustom(hwndLV, &findData); } while (FindNextFile(hFile, &findData)) { if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { continue; } AddLogItemCustom(hwndLV, &findData); }
Exit: if (hFile != INVALID_HANDLE_VALUE) { FindClose(hFile); }
return bRet; }
void AddLogItemCustom(HWND hwndLV, WIN32_FIND_DATA *pfindData) { LVITEM lvitem; LPTSTR szNameTag = NULL; LPTSTR szExt = NULL; static TCHAR szBuf[MAX_DATE_LEN]; static TCHAR szExeBuf[MAX_PATH];
memset(&lvitem, 0, sizeof(lvitem)); lvitem.mask = LVIF_TEXT; FormatDateBuffer(&pfindData->ftLastAccessTime, szBuf);
lstrcpy(szExeBuf, pfindData->cFileName + lstrlen(FILESPEC_SEARCH_PATTERN)); szNameTag = StrStr(szExeBuf, TEXT("!name=")); if (!szNameTag) { // Fatal!
return; }
*szNameTag++ = TEXT('\0');
szNameTag += lstrlen(TEXT("name=")); szExt = StrStrI(szNameTag, TEXT(".htm")); if (szExt) { *szExt = TEXT('\0'); }
lvitem.iItem = 0; lvitem.iSubItem = 0; lvitem.pszText = szExeBuf; lvitem.iItem = ListView_InsertItem(hwndLV, &lvitem);
lvitem.iSubItem = 1; lvitem.pszText = szNameTag; ListView_SetItem(hwndLV, &lvitem);
lvitem.iSubItem = 2; lvitem.pszText = szBuf; ListView_SetItem(hwndLV, &lvitem); }
void RefreshWininetView(HWND hwnd) { HANDLE hUrlCacheEnum; DWORD dwBufferSize = MAX_CACHE_ENTRY_INFO_SIZE; LPINTERNET_CACHE_ENTRY_INFO pCacheEntryInfo = NULL; HWND hwndLV; static char pBuffer[MAX_CACHE_ENTRY_INFO_SIZE];
hwndLV = GetDlgItem(hwnd, IDC_LV_LOGMESSAGES);
ListView_DeleteAllItems(hwndLV); pCacheEntryInfo = (LPINTERNET_CACHE_ENTRY_INFO)pBuffer; hUrlCacheEnum = FindFirstUrlCacheEntry(URL_SEARCH_PATTERN, pCacheEntryInfo, &dwBufferSize); if (hUrlCacheEnum != NULL) { if (pCacheEntryInfo->lpszSourceUrlName != NULL) { if (StrStrI(pCacheEntryInfo->lpszSourceUrlName, URL_SEARCH_PATTERN)) { AddLogItem(hwndLV, pCacheEntryInfo); } }
dwBufferSize = MAX_CACHE_ENTRY_INFO_SIZE; while (FindNextUrlCacheEntry(hUrlCacheEnum, pCacheEntryInfo, &dwBufferSize)) { if (pCacheEntryInfo->lpszSourceUrlName != NULL) { if (StrStrI(pCacheEntryInfo->lpszSourceUrlName, URL_SEARCH_PATTERN)) { AddLogItem(hwndLV, pCacheEntryInfo); } }
dwBufferSize = MAX_CACHE_ENTRY_INFO_SIZE; } } }
void AddLogItem(HWND hwndLV, LPINTERNET_CACHE_ENTRY_INFO pCacheEntryInfo) { LVITEM lvitem; LPSTR szNameTag = NULL; static char szBuf[MAX_DATE_LEN]; static char szExeBuf[MAX_PATH];
memset(&lvitem, 0, sizeof(lvitem)); lvitem.mask = LVIF_TEXT; FormatDateBuffer(&pCacheEntryInfo->LastModifiedTime, szBuf);
lstrcpy(szExeBuf, pCacheEntryInfo->lpszSourceUrlName + lstrlen(URL_SEARCH_PATTERN)); szNameTag = StrStr(szExeBuf, "!name="); if (!szNameTag) { // Fatal!
return; }
*szNameTag++ = TEXT('\0');
szNameTag += lstrlen("name=");
lvitem.iItem = 0; lvitem.iSubItem = 0; lvitem.pszText = szExeBuf; lvitem.iItem = ListView_InsertItem(hwndLV, &lvitem);
lvitem.iSubItem = 1; lvitem.pszText = szBuf; ListView_SetItem(hwndLV, &lvitem);
lvitem.iSubItem = 2; lvitem.pszText = szNameTag; ListView_SetItem(hwndLV, &lvitem); }
void FormatDateBuffer(FILETIME *pftLastMod, LPSTR szBuf) { SYSTEMTIME systime; FILETIME ftLocalLastMod; char szBufDate[MAX_DATE_LEN]; char szBufTime[MAX_DATE_LEN];
FileTimeToLocalFileTime(pftLastMod, &ftLocalLastMod); FileTimeToSystemTime(&ftLocalLastMod, &systime); if (!GetDateFormat(LOCALE_SYSTEM_DEFAULT, 0, &systime, NULL, szBufDate, MAX_DATE_LEN)) { return; }
if (!GetTimeFormat(LOCALE_SYSTEM_DEFAULT, 0, &systime, NULL, szBufTime, MAX_DATE_LEN)) { return; } wnsprintf(szBuf, MAX_DATE_LEN, "%s @ %s", szBufDate, szBufTime); }
void InitListView(HWND hwndLV) { LVCOLUMN lvcol; TCHAR szText[MAX_RES_TEXT_LEN];
memset(&lvcol, 0, sizeof(LVCOLUMN));
lvcol.mask = LVCF_TEXT | LVCF_WIDTH;
// Application
lvcol.cx = 300;
if (!LoadString(g_hInst, ID_FUSLOGVW_HEADER_TEXT_APPLICATION, szText, MAX_RES_TEXT_LEN)) { return; }
lvcol.pszText = szText; ListView_InsertColumn(hwndLV, 0, &lvcol);
// Date/Time
if (!LoadString(g_hInst, ID_FUSLOGVW_HEADER_TEXT_DATE_TIME, szText, MAX_RES_TEXT_LEN)) { return; }
lvcol.pszText = szText; lvcol.cx = 154;
ListView_InsertColumn(hwndLV, 1, &lvcol);
// Description
if (!LoadString(g_hInst, ID_FUSLOGVW_HEADER_TEXT_DESCRIPTION, szText, MAX_RES_TEXT_LEN)) { return; }
lvcol.cx = 100; lvcol.pszText = szText;
ListView_InsertColumn(hwndLV, 2, &lvcol);
}
void InitCustomLogPaths() { LONG lResult; HKEY hkey; // BOOL bRet;
DWORD dwSize; DWORD dwAttr; DWORD dwType; TCHAR szCorSystemDir[MAX_PATH]; // TCHAR szXSPAppCacheDir[MAX_PATH];
g_szCustomLogPath[0] = L'\0'; g_szXSPLogPath[0] = L'\0';
// Custom log path
lResult = RegOpenKeyEx(HKEY_CURRENT_USER, REG_KEY_FUSION_SETTINGS, 0, KEY_READ, &hkey); if (lResult == ERROR_SUCCESS) { dwSize = MAX_PATH; lResult = RegQueryValueEx(hkey, REG_VAL_FUSION_LOG_PATH, NULL, &dwType, (LPBYTE)g_szCustomLogPath, &dwSize); if (lResult == ERROR_SUCCESS) { PathRemoveBackslash(g_szCustomLogPath); }
RegCloseKey(hkey);
dwAttr = GetFileAttributes(g_szCustomLogPath); if (dwAttr == -1 || !(dwAttr & FILE_ATTRIBUTE_DIRECTORY)) { g_szCustomLogPath[0] = L'\0'; } }
// XSP log path
if (!GetCorSystemDirectory(szCorSystemDir)) { goto Exit; }
dwSize = lstrlen(szCorSystemDir); if (dwSize) { if (szCorSystemDir[dwSize - 1] == TEXT('\\')) { szCorSystemDir[dwSize - 1] = TEXT('\0'); } }
#ifdef UNICODE
wnsprintfW(g_szXSPLogPath, MAX_PATH, L"%ws\\%ws\\%ws", szCorSystemDir, XSP_APP_CACHE_DIR, XSP_FUSION_LOG_DIR); #else
wnsprintfA(g_szXSPLogPath, MAX_PATH, "%s\\%s\\%s", szCorSystemDir, XSP_APP_CACHE_DIR, XSP_FUSION_LOG_DIR); #endif
dwAttr = GetFileAttributes(g_szXSPLogPath); if (dwAttr == -1) { g_szXSPLogPath[0] = TEXT('\0'); }
Exit: return; }
void InitText(HWND hwnd) { TCHAR szText[MAX_RES_TEXT_LEN];
szText[0] = L'\0';
if (LoadString(g_hInst, ID_FUSLOGVW_DIALOG_TITLE, szText, MAX_RES_TEXT_LEN)) { SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM) szText); }
if (LoadString(g_hInst, ID_FUSLOGVW_BUTTON_VIEW_LOG, szText, MAX_RES_TEXT_LEN)) { SetDlgItemText(hwnd, IDC_CB_VIEWLOG, szText); }
if (LoadString(g_hInst, ID_FUSLOGVW_BUTTON_DELETE_ENTRY, szText, MAX_RES_TEXT_LEN)) { SetDlgItemText(hwnd, IDC_CB_DELETE, szText); }
if (LoadString(g_hInst, ID_FUSLOGVW_BUTTON_DELETE_ALL, szText, MAX_RES_TEXT_LEN)) { SetDlgItemText(hwnd, IDC_CB_DELETE_ALL, szText); }
if (LoadString(g_hInst, ID_FUSLOGVW_BUTTON_REFRESH, szText, MAX_RES_TEXT_LEN)) { SetDlgItemText(hwnd, IDC_CB_REFRESH, szText); }
if (LoadString(g_hInst, ID_FUSLOGVW_BUTTON_EXIT, szText, MAX_RES_TEXT_LEN)) { SetDlgItemText(hwnd, IDCANCEL, szText); }
if (LoadString(g_hInst, ID_FUSLOGVW_RADIO_LOCATION_DEFAULT, szText, MAX_RES_TEXT_LEN)) { SetDlgItemText(hwnd, IDC_RADIO_DEFAULT, szText); } if (LoadString(g_hInst, ID_FUSLOGVW_RADIO_LOCATION_DEFAULT, szText, MAX_RES_TEXT_LEN)) { SetDlgItemText(hwnd, IDC_RADIO_DEFAULT, szText); } /*
if (LoadString(g_hInst, ID_FUSLOGVW_RADIO_LOCATION_ASP_NET, szText, MAX_RES_TEXT_LEN)) { SetDlgItemText(hwnd, IDC_RADIO_XSP, szText); } */ if (LoadString(g_hInst, ID_FUSLOGVW_RADIO_LOCATION_CUSTOM, szText, MAX_RES_TEXT_LEN)) { SetDlgItemText(hwnd, IDC_RADIO_CUSTOM, szText); }
if (LoadString(g_hInst, ID_FUSLOGVW_CHECKBOX_ENABLELOG, szText, MAX_RES_TEXT_LEN)) { SetDlgItemText(hwnd, IDC_CB_ENABLELOG, szText); } }
BOOL GetCorSystemDirectory(LPTSTR szCorSystemDir) { BOOL fRet = FALSE; DWORD ccPath = MAX_PATH; WCHAR szDir[MAX_PATH]; PFNGETCORSYSTEMDIRECTORY pfnGetCorSystemDirectory = NULL;
HMODULE hEEShim = LoadLibrary(TEXT("mscoree.dll")); if (!hEEShim) goto exit;
pfnGetCorSystemDirectory = (PFNGETCORSYSTEMDIRECTORY) GetProcAddress(hEEShim, "GetCORSystemDirectory");
if (!pfnGetCorSystemDirectory || FAILED(pfnGetCorSystemDirectory(szDir, MAX_PATH, &ccPath))) goto exit;
#ifdef UNICODE
lstrcpyW(szCorSystemDir, szDir); #else
if (!WideCharToMultiByte(CP_ACP, 0, szDir, -1, szCorSystemDir, MAX_PATH * sizeof(TCHAR), NULL, NULL)) { goto exit; } #endif
fRet = TRUE;
exit: if (!fRet) { FreeLibrary(hEEShim); } return fRet; }
int _stdcall ModuleEntry(void) { int i; STARTUPINFO si; LPTSTR pszCmdLine = GetCommandLine();
si.dwFlags = 0; GetStartupInfoA(&si);
i = WinMain(GetModuleHandle(NULL), NULL, pszCmdLine, (si.dwFlags & STARTF_USESHOWWINDOW) ? si.wShowWindow : SW_SHOWDEFAULT);
ExitProcess(i); return i; // We never come here
}
|