找到notepad.exe和mspaint.exe的路径

时间:2009-02-06 07:20:02

标签: winapi search filesystems filepath

找出notepad.exe和mspaint.exe在各种版本的Windows中可以使用的最佳方法是什么?

我应该通过SHGetFolderPath(NULL, CSIDL_WINDOWS, NULL, SHGFP_TYPE_CURRENT, dir)获取Windows目录,然后遍历所有子目录以查找这两个文件吗?

(假设我对Windows文件夹以外的任何内容都不感兴趣。)

11 个答案:

答案 0 :(得分:41)

这适用于我有权访问的每个Windows框(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

最棒的是,你没有 使用实际的%PATH%,你可以使用不同的环境变量替换你自己的搜索路径。

答案 1 :(得分:18)

如果您安装了Microsoft Platform SDK(the February 2003 version是最后一个适用于Microsoft VC6的程序),您可以获取where.exe程序(它是38K,如果你gzip它只有18K)和运行

where notepad.exe
来自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

答案 2 :(得分:3)

检查本地化版本上的HKEY_CLASSES_ROOT \ Applications \ notepad.exe密钥是否相同。也许键名是相同的,编辑/打开的值指向本地化的exe 例如:

英文:
HKEY_CLASSES_ROOT \应用程序\ NOTEPAD.EXE \壳\编辑\命令
%SystemRoot%\ system32 ** NOTEPAD.EXE **%1

荷兰语:
HKEY_CLASSES_ROOT \应用程序\ NOTEPAD.EXE \壳\编辑\命令
%SystemRoot%\ system32 ** kladblok.exe **%1

如果是这样,那么它就要检查注册表中的那个键(同样适用于mspaint)。

答案 3 :(得分:3)

输入:

%WINDIR%\ SYSTEM32 \ Notepad.exe的 在路径栏中的东西

C:\ Windows \ System32下 并找到notepad.exe

* C是您的操作系统所在的硬盘驱动器:)

答案 4 :(得分:2)

我认为从小做起,您应该获取windir环境变量,并查看%windir%\system32\mspaint的子文件夹notepad。 他们很可能会在那里。

然而,如果失败了,那么就采取更强力搜索。

答案 5 :(得分:2)

通常,您只需执行它们即可。它们位于每个Windows版本的系统路径中。

您可以使用ExpandEnvironmentStrings。您要扩展的环境变量是WINDIR

过去您可以使用GetWindowsDirectoryGetSystemDirectory,但我认为它们已被弃用。

答案 6 :(得分:1)

由于您使用WinAPI标记了问题,我会使用SearchPath(),例如以下内容将使用结果填充变量path

//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);

答案 7 :(得分:0)

尝试打开DOS提示符,切换到Windows文件夹并执行:

dir notepad.exe /s

DOS万岁:)

答案 8 :(得分:0)

使用WinAPI函数GetWindowsDirectory()获取Windows文件夹,使用GetSystemDirectory()获取Windows \ System文件夹。至少从Win95开始,我们保证可以使用所有Windows版本;我认为它们也可以在Win 3.x中使用。

答案 9 :(得分:0)

总之,我发现最好的方法 是检查 Windows\System32目录 和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths注册表项。

更一般地说,我发现最好的方法 是模仿ShellExecuteEx

取自: 申请注册(Windows)
https://msdn.microsoft.com/en-us/library/windows/desktop/ee872121(v=vs.85).aspx

  

在以下位置寻找该文件:
  •当前工作目录   •仅限Windows目录(不搜索子目录)   •Windows \ System32目录   •PATH环境变量中列出的目录   •推荐:HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ App Paths

还可能是检查Start Menu\Programs\Accessories, 将SHGetFolderPathCSIDL_STARTMENU := 11一起使用 和CSIDL_COMMON_STARTMENU := 22,并检索目标 来自lnk文件。

答案 10 :(得分:-1)

转到system32文件夹并输入" notepad.exe"进入'文件名'杆