C#:如何获取给定无路径文件时Process.Start将使用的可执行路径?

拉尔金

System.Diagnostics.Process.Start()方法接受ProcessStartInfo用没有路径的可执行文件初始化类实例,例如Notepad.exe该过程开始后,您可以找到其使用的完整路径,例如C:\Windows\SysWOW64\notepad.exe这是完美的,除非您想在不实际启动程序的情况下了解完整路径。就我而言,我想提前从可执行文件中获取图标。

这类似于Windows“ where”命令的行为,例如:

C:>where notepad.exe
C:>\Windows\System32\notepad.exe
C:>\Windows\notepad.exe

第一个响应C:\Windows\System32\notepad.exe与“ Process”所使用的基本相同。

博士

搜索路径的顺序实际上是与注册表相关的,因此不能保证仅通过PATH环境变量进行枚举即可产生预期的结果,尤其是在当前工作目录中存在具有预期名称的文件的情况下。为了可靠地获取可执行文件路径,您将需要SearchPath在Kernel32中调用Win32函数。

没有公开的框架.NET函数SearchPath,但是可以通过P / Invoke直接调用该函数

下面的示例程序说明了此功能的用法。如果notepad.exe存在于系统搜索路径中,则按照系统配置,它将打印路径;如果它不存在,它将打印“找不到文件”。

using System;
using System.Text;
using System.Runtime.InteropServices;

class Program
{
    [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
    static extern uint SearchPath(string lpPath,
         string lpFileName,
         string lpExtension,
         int nBufferLength,
         [MarshalAs ( UnmanagedType.LPTStr )]
             StringBuilder lpBuffer,
         out IntPtr lpFilePart);
    const int MAX_PATH = 260;
    public static void Main()
    {
        StringBuilder sb = new StringBuilder(MAX_PATH);
        IntPtr discard;
        var nn = SearchPath(null, "notepad.exe", null, sb.Capacity, sb, out discard);
        if (nn == 0)
        {
            var error = Marshal.GetLastWin32Error();
            // ERROR_FILE_NOT_FOUND = 2
            if (error == 2) Console.WriteLine("No file found.");
            else
                throw new System.ComponentModel.Win32Exception(error);
        }
        else
            Console.WriteLine(sb.ToString());
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C#:如何获取给定无路径文件时Process.Start将使用的可执行路径?

来自分类Dev

在 C++ 中使用 AssocQueryString 获取可执行路径

来自分类Dev

如何找到php的可执行路径?

来自分类Dev

Windows Update可执行路径

来自分类Dev

错误CS2012:无法打开对<可执行路径被拒绝>的<可执行路径>访问

来自分类Dev

Bash选项获取已解析的可执行路径?

来自分类Dev

如何通过此pid执行的文件获取pid及其可执行路径信息?

来自分类Dev

可执行路径必须在Python的PATH中

来自分类Dev

通过可执行路径限制进程的CPU时间

来自分类Dev

删除特定可执行路径的bash哈希

来自分类Dev

如何获取给定路径的文件系统的UUID?

来自分类Dev

如何从.desktop文件中的可执行路径获取期望的进程名称

来自分类Dev

无法获取.net core 3.0单个文件'/ p:PublishSingleFile = true'的原始可执行路径

来自分类Dev

Fsx执行路径

来自分类Dev

JavaScript执行路径

来自分类Dev

如何在Emacs的配置文件上为程序包设置可执行路径?

来自分类Dev

用环境设置的可执行路径编写系统单元文件

来自分类Dev

如何修复导致“ubuntu 内部错误”的不存在的可执行路径?

来自分类Dev

如何验证是否可以使用Powershell执行路径?

来自分类Dev

在 Rider IDE 中为 Web 项目更改运行/调试配置的可执行路径

来自分类Dev

Powershell 获取给定路径中的扩展文件

来自分类Dev

如何在Linux下以编程方式可靠地获取与具有给定pid的进程相对应的可执行路径?

来自分类Dev

如何在bash中获取给定路径的根目录?

来自分类Dev

路径。如何获取给定 Selector 的标签名称。刮痧

来自分类Dev

.desktop文件。正确的执行路径

来自分类Dev

C#-将可执行路径和参数拆分为两个字符串

来自分类Dev

C#-将可执行路径和参数拆分为两个字符串

来自分类Dev

通过Process.Start以空格作为可执行文件的参数传递路径

来自分类Dev

如何获取python可执行文件的文件路径

Related 相关文章

  1. 1

    C#:如何获取给定无路径文件时Process.Start将使用的可执行路径?

  2. 2

    在 C++ 中使用 AssocQueryString 获取可执行路径

  3. 3

    如何找到php的可执行路径?

  4. 4

    Windows Update可执行路径

  5. 5

    错误CS2012:无法打开对<可执行路径被拒绝>的<可执行路径>访问

  6. 6

    Bash选项获取已解析的可执行路径?

  7. 7

    如何通过此pid执行的文件获取pid及其可执行路径信息?

  8. 8

    可执行路径必须在Python的PATH中

  9. 9

    通过可执行路径限制进程的CPU时间

  10. 10

    删除特定可执行路径的bash哈希

  11. 11

    如何获取给定路径的文件系统的UUID?

  12. 12

    如何从.desktop文件中的可执行路径获取期望的进程名称

  13. 13

    无法获取.net core 3.0单个文件'/ p:PublishSingleFile = true'的原始可执行路径

  14. 14

    Fsx执行路径

  15. 15

    JavaScript执行路径

  16. 16

    如何在Emacs的配置文件上为程序包设置可执行路径?

  17. 17

    用环境设置的可执行路径编写系统单元文件

  18. 18

    如何修复导致“ubuntu 内部错误”的不存在的可执行路径?

  19. 19

    如何验证是否可以使用Powershell执行路径?

  20. 20

    在 Rider IDE 中为 Web 项目更改运行/调试配置的可执行路径

  21. 21

    Powershell 获取给定路径中的扩展文件

  22. 22

    如何在Linux下以编程方式可靠地获取与具有给定pid的进程相对应的可执行路径?

  23. 23

    如何在bash中获取给定路径的根目录?

  24. 24

    路径。如何获取给定 Selector 的标签名称。刮痧

  25. 25

    .desktop文件。正确的执行路径

  26. 26

    C#-将可执行路径和参数拆分为两个字符串

  27. 27

    C#-将可执行路径和参数拆分为两个字符串

  28. 28

    通过Process.Start以空格作为可执行文件的参数传递路径

  29. 29

    如何获取python可执行文件的文件路径

热门标签

归档