BOOL CFileDefExt::InitFilePath(HWND hwndDlg) { /* Find the filename */ WCHAR *pwszFilename = PathFindFileNameW(m_wszPath); if (pwszFilename > m_wszPath) { /* Location field */ WCHAR wszLocation[MAX_PATH]; StringCchCopyNW(wszLocation, _countof(wszLocation), m_wszPath, pwszFilename - m_wszPath); PathRemoveBackslashW(wszLocation); SetDlgItemTextW(hwndDlg, 14009, wszLocation); } /* Filename field */ SetDlgItemTextW(hwndDlg, 14001, pwszFilename); return TRUE; }
BOOL SH_ShowPropertiesDialog(LPCWSTR pwszPath, LPCITEMIDLIST pidlFolder, LPCITEMIDLIST *apidl) { HPSXA hpsxa[3] = {NULL, NULL, NULL}; CComObject<CFileDefExt> *pFileDefExt = NULL; TRACE("SH_ShowPropertiesDialog entered filename %s\n", debugstr_w(pwszPath)); if (pwszPath == NULL || !wcslen(pwszPath)) return FALSE; HPROPSHEETPAGE hppages[MAX_PROPERTY_SHEET_PAGE]; memset(hppages, 0x0, sizeof(HPROPSHEETPAGE) * MAX_PROPERTY_SHEET_PAGE); /* Make a copy of path */ WCHAR wszPath[MAX_PATH]; StringCbCopyW(wszPath, sizeof(wszPath), pwszPath); /* remove trailing \\ at the end of path */ PathRemoveBackslashW(wszPath); /* Handle drives */ if (PathIsRootW(wszPath)) return SH_ShowDriveProperties(wszPath, pidlFolder, apidl); /* Handle files and folders */ PROPSHEETHEADERW Header; memset(&Header, 0x0, sizeof(PROPSHEETHEADERW)); Header.dwSize = sizeof(PROPSHEETHEADERW); Header.dwFlags = PSH_NOCONTEXTHELP | PSH_PROPTITLE; Header.phpage = hppages; Header.pszCaption = PathFindFileNameW(wszPath); CComPtr<IDataObject> pDataObj; HRESULT hr = SHCreateDataObject(pidlFolder, 1, apidl, NULL, IID_IDataObject, (LPVOID *)&pDataObj); if (SUCCEEDED(hr)) { hr = CComObject<CFileDefExt>::CreateInstance(&pFileDefExt); if (SUCCEEDED(hr)) { pFileDefExt->AddRef(); // CreateInstance returns object with 0 ref count hr = pFileDefExt->Initialize(pidlFolder, pDataObj, NULL); if (SUCCEEDED(hr)) { hr = pFileDefExt->AddPages(AddPropSheetPageCallback, (LPARAM)&Header); if (FAILED(hr)) ERR("AddPages failed\n"); } else ERR("Initialize failed\n"); } LoadPropSheetHandlers(wszPath, &Header, MAX_PROPERTY_SHEET_PAGE - 1, hpsxa, pDataObj); } INT_PTR Result = PropertySheetW(&Header); for (UINT i = 0; i < 3; ++i) if (hpsxa[i]) SHDestroyPropSheetExtArray(hpsxa[i]); if (pFileDefExt) pFileDefExt->Release(); return (Result != -1); }
HRESULT CDebugLog::Init(IApplicationContext *pAppCtx, LPCWSTR pwzAsmName) { HRESULT hr = S_OK; LPWSTR wzAppName = NULL; if (!pwzAsmName) { hr = E_INVALIDARG; goto Exit; } hr = SetAsmName(pwzAsmName); if (FAILED(hr)) { goto Exit; } // Get the executable name hr = ::AppCtxGetWrapper(pAppCtx, ACTAG_APP_NAME, &wzAppName); if (FAILED(hr)) { goto Exit; } if (wzAppName && lstrlenW(wzAppName)) { _wzEXEName = WSTRDupDynamic(wzAppName); if (!_wzEXEName) { hr = E_OUTOFMEMORY; goto Exit; } } else { LPWSTR wzFileName; // Didn't find EXE name in appctx. Use the .EXE name. wzFileName = PathFindFileName(g_wzEXEPath); ASSERT(wzFileName); _wzEXEName = WSTRDupDynamic(wzFileName); if (!_wzEXEName) { hr = E_OUTOFMEMORY; goto Exit; } } // Log path if (!PAL_FetchConfigurationString(TRUE, REG_VAL_FUSION_LOG_PATH, _szLogPath, MAX_PATH)) { // fallback to default if (!PAL_GetUserConfigurationDirectory(_szLogPath, MAX_PATH)) { hr = HRESULT_FROM_WIN32(GetLastError()); goto Exit; } StrCatBuff(_szLogPath, L"\\FusionLogs", MAX_PATH); } PathRemoveBackslashW(_szLogPath); Exit: SAFEDELETEARRAY(wzAppName); return hr; }
/** \brief 主函数 * * 主启动函数。负责调用启动DLL的启动函数 */ INT WINAPI WinMain(HINSTANCE currentInstance, HINSTANCE previousInstance, LPSTR pCommandLine, INT showType) { INT exitCode = -1; /* 获得几个要加到Path的文件夹路径 */ wchar_t binaryPath[MAX_PATH]; wchar_t pathEnvironmentVariable[32767 /* http://msdn.microsoft.com/en-us/library/windows/desktop/ms683188.aspx */ ]; std::wstring newPathEnvironmentVariable; // 当前exe路径 GetModuleFileNameW(currentInstance, binaryPath, sizeof(binaryPath) / sizeof(binaryPath[0])); PathRemoveBlanksW(binaryPath); PathUnquoteSpacesW(binaryPath); PathRemoveBackslashW(binaryPath); // bin文件夹路径 PathRemoveFileSpecW(binaryPath); PathAppendW(binaryPath, L"bin"); // 拷贝到待增加路径字符串 newPathEnvironmentVariable.append(binaryPath); // plugin文件夹路径 PathRemoveFileSpecW(binaryPath); PathAppendW(binaryPath, L"plugin"); // 拷贝到待增加路径字符串 newPathEnvironmentVariable.append(L";"); newPathEnvironmentVariable.append(binaryPath); /* 设置PATH环境变量 */ // 获取环境变量 pathEnvironmentVariable[0] = L'\0'; DWORD length = GetEnvironmentVariableW(L"PATH", pathEnvironmentVariable, sizeof(pathEnvironmentVariable) / sizeof(pathEnvironmentVariable[0])); // 组合新环境变量 if (length > 0) newPathEnvironmentVariable.append(L";"); newPathEnvironmentVariable.append(pathEnvironmentVariable); // 拷贝回去 wcscpy_s(pathEnvironmentVariable, newPathEnvironmentVariable.c_str()); // 设置环境变量 SetEnvironmentVariableW(L"PATH", pathEnvironmentVariable); /* 载入CRT的Dll,防止Dll冲突 */ // 再次得到bin文件夹路径 PathRemoveFileSpecW(binaryPath); PathAppendW(binaryPath, L"bin"); #ifdef _DEBUG PathAppendW(binaryPath, L"msvcr100d.dll"); HMODULE msvcr100 = LoadLibraryW(binaryPath); PathRemoveFileSpecW(binaryPath); PathAppendW(binaryPath, L"msvcp100d.dll"); HMODULE msvcp100 = LoadLibraryW(binaryPath); #else PathAppendW(binaryPath, L"msvcr100.dll"); HMODULE msvcr100 = LoadLibraryW(binaryPath); PathRemoveFileSpecW(binaryPath); PathAppendW(binaryPath, L"msvcp100.dll"); HMODULE msvcp100 = LoadLibraryW(binaryPath); #endif // 尝试载入YDWEStartup.dll HMODULE startupModule = LoadLibraryW(L"YDWEStartup.dll"); if (startupModule) { TPFStartup pfStartup = (TPFStartup)GetProcAddress(startupModule, "YDWEStartup"); if (pfStartup) exitCode = pfStartup(currentInstance, previousInstance, pCommandLine, showType); FreeLibrary(startupModule); } if (msvcp100) FreeLibrary(msvcp100); if (msvcr100) FreeLibrary(msvcr100); return exitCode; }