fs::path GetResourcesPath() { fs::path execPath = GetExecutionPath(); std::wstring resPathStr = TEXT("/Resources"); // check up one level fs::path fullPath = fs::path(execPath.parent_path().wstring() + resPathStr); if(fs::exists(fullPath)) return fullPath; // check up two level fullPath = fs::path(execPath.parent_path().parent_path().wstring() + resPathStr); if(fs::exists(fullPath)) return fullPath; // all failed return TEXT(""); }
/* Try and figure out the path and name of the client */ MagickExport void InitializeMagickClientPathAndName(const char *path) { #if !defined(UseInstalledMagick) const char *spath; char execution_path[MaxTextExtent]; /* the following is to make the logging more readable later on */ spath = path; if (spath == (char *) NULL) spath = "NULL"; if (*spath == '\0') spath = "EMPTY"; *execution_path='\0'; if (!IsValidFilesystemPath(path)) { /* If the path passed is NULL or invalid then we try to ask the OS what the name of the executable is. Callers will often pass NULL in order to invoke this functionality. */ if (GetExecutionPath(execution_path)) { /* The call to the OS worked so we can do all the settings */ (void) DefineClientPathAndName(execution_path); (void) LogMagickEvent(ConfigureEvent,GetMagickModule(), "Invalid path \"%s\" passed - asking OS worked: \"%s\"",spath, execution_path); } else { /* The call to the OS failed so we try to compute a usable path based on the current working directory or by searching the executable search path. */ if (path) (void) strlcpy(execution_path,path,MaxTextExtent); if (GetExecutionPathUsingName(execution_path)) { (void) DefineClientPathAndName(execution_path); (void) LogMagickEvent(ConfigureEvent,GetMagickModule(), "Invalid path \"%s\" passed - asking OS failed, getcwd worked: \"%s\"",spath, execution_path); } else { /* At this point we are totally hosed and have nothing to go on for the path, so all we can do is log the error */ (void) LogMagickEvent(ConfigureEvent,GetMagickModule(), "Invalid path \"%s\" passed - asking OS failed, getcwd also failed",spath); } } } else { /* This is the easy one. The caller gave us the correct and working path to the application, so we just use it */ (void) strlcpy(execution_path,path,MaxTextExtent); (void) DefineClientPathAndName(execution_path); (void) LogMagickEvent(ConfigureEvent,GetMagickModule(),"Valid path \"%s\"",spath); } #else ARG_NOT_USED(path); #endif }