Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取用于在C中打开文件的过程#_C#_Wpf_Windows - Fatal编程技术网

C# 如何获取用于在C中打开文件的过程#

C# 如何获取用于在C中打开文件的过程#,c#,wpf,windows,C#,Wpf,Windows,我正在尝试使用关联的应用程序打开不同的文件,如下所示: ProcessPath = @"C:\Users\Public\Pictures\Sample Pictures\Tulips.jpg"; ProcessStartInfo processStartInfo = new ProcessStartInfo(); processStartInfo.FileName = ProcessPath;

我正在尝试使用关联的应用程序打开不同的文件,如下所示:

                ProcessPath = @"C:\Users\Public\Pictures\Sample Pictures\Tulips.jpg";
                ProcessStartInfo processStartInfo = new ProcessStartInfo();
                processStartInfo.FileName = ProcessPath;
                processStartInfo.WorkingDirectory = System.IO.Path.GetDirectoryName(ProcessPath);

                process = new Process();
                process.StartInfo = processStartInfo;
                process.EnableRaisingEvents = true;
                process.Exited += Process_Exited;
                process.Start();     
请您帮助我获取表示已打开应用程序的Process对象,因为在调用Process.Start()之后;进程中的大多数字段都抛出了异常


谢谢。

我已经找到了一个解决方案:

使用Windows API函数

        [DllImport("shell32.dll")]
    static extern int FindExecutable(string file, string directory, [Out] StringBuilder lpResult);

返回给定文件的关联应用程序路径。然后,我可以使用我发布的原始代码执行关联的应用程序,并将原始文件作为参数传递

我设法找到了一个解决方案:

使用Windows API函数

        [DllImport("shell32.dll")]
    static extern int FindExecutable(string file, string directory, [Out] StringBuilder lpResult);

返回给定文件的关联应用程序路径。然后,我可以使用我发布的原始代码执行关联的应用程序,并将原始文件作为参数传递

这就是一个过程,尽管它还不一定准备好进行交互(或者再也不能保证要求shell打开一个文件会导致一个新的过程;例如,假设所有Excel文件都在一个Excel实例中打开)。你想做什么?主要是用默认应用程序打开图像文件或PDF。因此,我上面发布的代码将在windows photo viewer中打开一个默认的windows图像,但启动该图像的过程在我看来是无用的。在您查看时,该过程可能没有做任何事情。但是,您所做的相当于“启动我的.jpg”,而不是启动一个带有jpg的应用程序来打开,soprocess.WaitForInputIdle();不会有帮助,因为该进程可能已经终止,因为该进程随后生成了实际的应用程序。我假设可能会发生这种情况,但我想知道如何获取它生成的进程的id或名称,有什么想法吗?我想你真的不能。正如我所说,它甚至不必是一个过程——关联不一定“用这些参数启动这个exe”,还有DLL、DDL和其他。无法保证一个过程是否启动,如果启动了,它能存活多久以及它能做什么。您想对启动的流程做些什么(如果有一个流程,并且它不受前面提到的任何问题的影响)?从用户的角度来看,你想做什么?是否等待关闭应用程序?对于非桌面应用程序,这在Windows 8+上是如何工作的?这是一个过程,尽管它还不一定准备好进行交互(或者再也不能保证要求shell打开一个文件会导致一个新的过程;例如,假设所有Excel文件都在一个Excel实例中打开)。你想做什么?主要是用默认应用程序打开图像文件或PDF。因此,我上面发布的代码将在windows photo viewer中打开一个默认的windows图像,但启动该图像的过程在我看来是无用的。在您查看时,该过程可能没有做任何事情。但是,您所做的相当于“启动我的.jpg”,而不是启动一个带有jpg的应用程序来打开,soprocess.WaitForInputIdle();不会有帮助,因为该进程可能已经终止,因为该进程随后生成了实际的应用程序。我假设可能会发生这种情况,但我想知道如何获取它生成的进程的id或名称,有什么想法吗?我想你真的不能。正如我所说,它甚至不必是一个过程——关联不一定“用这些参数启动这个exe”,还有DLL、DDL和其他。无法保证一个过程是否启动,如果启动了,它能存活多久以及它能做什么。您想对启动的流程做些什么(如果有一个流程,并且它不受前面提到的任何问题的影响)?从用户的角度来看,你想做什么?是否等待关闭应用程序?在Windows 8+上,对于非桌面应用程序,这将如何工作?