英文:
Process.Start can not open a file based on the extension
问题
如果我在命令提示符中输入以下内容:
c:\Data\a.xls
c:\Data\b.pdf
c:\Data\c.txt
那么相应的文件将会用默认应用程序打开。我可以从程序中执行相同的操作:
Process.Start(@"c:\Data\a.xls");
Process.Start(@"c:\Data\b.pdf");
Process.Start(@"c:\Data\c.txt");
不幸的是,这不再起作用了。我使用的是Windows 10和.NET 7。
Process.Start("notepad.exe", @"c:\Data\c.txt"); // 起作用
Process.Start("excel.exe", @"c:\Data\a.xls"); // 不起作用
如果我提供excel.exe的完整路径,那么它可以工作。我想实现以前的功能,只需提供文件名,然后用默认应用程序打开它。
英文:
If I write into the command prompt
c:\Data\a.xls
c:\Data\b.pdf
c:\Data\c.txt
then the corresponding files are opened with the default application. I could do the same from program.
Process.Start(@"c:\Data\a.xls");
Process.Start(@"c:\Data\b.pdf");
Process.Start(@"c:\Data\c.txt");
Unfortunately, this does not work anymore. I use windows 10 and .net7.
Process.Start("notepad.exe", @"c:\Data\c.txt"); // works
Process.Start("excel.exe", @"c:\Data\a.xls"); // does not work
If I provide the full path of excel.exe then it works. I would like to achieve the old functionality just to provide the filename and open it with the default application.
答案1
得分: 3
将 UseShellExecute 属性设置为 true。
> 在 .NET Framework 应用中,默认值为 true,在 .NET Core 应用中默认值为 false。
另请参阅 StartInfo。
下载/安装 NuGet 包: System.Diagnostics.Process
ProcessStartInfo startInfo = new ProcessStartInfo() { FileName = @"c:\Data\a.xls", UseShellExecute = true };
Process.Start(startInfo);
附加参考资料:
- ProcessStartInfo (源代码)
- ProcessStartInfo.Verbs
- ProcessStartInfo.Verb
- 获取可用的动词列表(文件关联)以与 ProcessStartInfo 在 C# 中使用
英文:
Set the UseShellExecute property to true.
> The default is true on .NET Framework apps and false on .NET Core apps.
Also see StartInfo.
Download/install NuGet package: System.Diagnostics.Process
ProcessStartInfo startInfo = new ProcessStartInfo() { FileName= @"c:\Data\a.xls", UseShellExecute = true };
Process.Start(startInfo);
Additional References:
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论