winapi - longpathsenabled - max_path windows 10
Encuentre la ruta de notepad.exe y mspaint.exe (11)
Como etiquetó la pregunta con WinAPI, utilizaría SearchPath() por ejemplo, lo siguiente rellenará la path
la variable con el resultado.
//Get the full path to notepad
char path[MAX_PATH] = { 0 };
LPSTR* ptr = NULL;
DWORD dwRet = SearchPath(NULL, "notepad.exe", NULL, MAX_PATH, (LPSTR)path, ptr);
¿Cuál es la mejor manera de averiguar dónde notepad.exe y mspaint.exe funcionan en varias versiones de Windows?
¿Debo obtener el directorio de Windows a través de SHGetFolderPath(NULL, CSIDL_WINDOWS, NULL, SHGFP_TYPE_CURRENT, dir)
y luego recorrer todos los subdirectorios para buscar los dos archivos?
(Supongamos que no estoy interesado en nada fuera de la carpeta de Windows).
Compruebe si la clave HKEY_CLASSES_ROOT / Applications / notepad.exe es la misma en las versiones localizadas. Tal vez el nombre de la clave sea el mismo y el valor para editar / abrir puntos para el exe localizado.
Ejemplo:
Inglés:
HKEY_CLASSES_ROOT / Applications / notepad.exe / shell / edit / command
% SystemRoot% / system32 ** NOTEPAD.EXE **% 1
Holandés:
HKEY_CLASSES_ROOT / Applications / notepad.exe / shell / edit / command
% SystemRoot% / system32 ** kladblok.exe **% 1
Si ese es el caso, entonces está a punto de verificar el registro de esa clave (lo mismo vale para mspaint).
Creo que para comenzar de a poco debería obtener la variable de entorno windir
y buscar en las subcarpetas %windir%/system32/
para mspaint
y notepad
. Lo más probable es que estén allí.
Sin embargo, si eso falla, entonces recurrir a una búsqueda de fuerza más bruta.
En resumen, creo que el mejor enfoque es verificar el directorio de Windows/System32
y las claves de registro HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/App Paths
.
En términos más generales, encuentro que el mejor enfoque es imitar a ShellExecuteEx
.
Tomado de:
Registro de aplicación (Windows)
https://msdn.microsoft.com/en-us/library/windows/desktop/ee872121(v=vs.85).aspx
El archivo se busca en las siguientes ubicaciones:
• El directorio de trabajo actual.
• Solo el directorio de Windows (no se buscan subdirectorios).
• El directorio de Windows / System32.
• Directorios enumerados en la variable de entorno PATH.
• Recomendado: HKEY_LOCAL_MACHINE / SOFTWARE / Microsoft / Windows / CurrentVersion / App Paths
Otra posibilidad es verificar el Start Menu/Programs/Accessories
, usando SHGetFolderPath
con CSIDL_STARTMENU := 11
y CSIDL_COMMON_STARTMENU := 22
, y recuperar los objetivos de los archivos lnk.
Esto funciona en cada caja de Windows a la que tengo acceso (XP +).
c:/> for %i in (cmd.exe) do @echo %~$PATH:i
C:/WINDOWS/system32/cmd.exe
c:/> for %i in (python.exe) do @echo %~$PATH:i
C:/Python25/python.exe
Lo bueno es que no tiene que usar el%% %PATH%
real, puede sustituir su propia ruta de búsqueda utilizando una variable de entorno diferente.
Intente abrir un mensaje de DOS, cambie a la carpeta de Windows y haga lo siguiente:
dir notepad.exe /s
Larga vida a DOS :)
Normalmente, simplemente los ejecutarías. Están en la ruta del sistema en cada versión de Windows.
Puede usar ExpandEnvironmentStrings
. La variable de entorno que desea expandir es WINDIR
.
En el pasado, podría haber usado GetWindowsDirectory
o GetSystemDirectory
, pero creo que están en desuso.
Si tiene instalado el Microsoft Platform SDK ( la versión de febrero de 2003 es la última que funciona con Microsoft VC6), puede tomar el programa where.exe
(es 38K, solo 18K si lo gzip) y ejecutar
where notepad.exe
ayuda del comando where
:
WHERE [/R dir] [/Q] [/F] [/T] pattern...
Description:
Displays the location of files that match the search pattern.
By default, the search is done along the current directory and
in the paths specified by the PATH environment variable.
Parameter List:
/R Recursively searches and displays the files that match the
given pattern starting from the specified directory.
/Q Returns only the exit code, without displaying the list
of matched files. (quite mode)
/F Displays the matched filename in double quotes.
/T Displays the file size, last modified date and time for all
matched files.
pattern Specifies the search pattern for the files to match.
Wildcards * and ? can be used in the pattern. The
"$env:pattern" and "path:pattern" formats can also be
specified, where "env" is an environment variable and
the search is done in the specified paths of the "env"
environment variable. These formats should not be used
with /R. The search is also done by appending the
extensions of the PATHEXT variable to the pattern.
/? Displays this help message.
NOTE: The tool returns an error level of 0 if the search is
successful, of 1 if the search is unsuccessful and
of 2 for failures or errors.
Examples:
WHERE /?
WHERE myfilename1 myfile????.*
WHERE $windir:*.*
WHERE /R c:/windows *.exe *.dll *.bat
WHERE /Q ??.???
WHERE "c:/windows;c:/windows/system32:*.dll"
WHERE /F /T *.dll
Tipo:
% windir% / system32 / notepad.exe en la barra de ruta thinggy
o
C: / Windows / System32 y encuentra notepad.exe
* C es el disco duro donde se encuentra su sistema operativo :)
Use la función WinAPI GetWindowsDirectory () para obtener la carpeta Windows y GetSystemDirectory () para obtener la carpeta Windows / System. Thely está garantizado para trabajar con todas las versiones de Windows desde al menos Win95; Creo que también estaban disponibles en Win 3.x.
Vaya a la carpeta system32 y escriba "notepad.exe" en la barra de "Nombre de archivo".