我需要使用与用户Windows上关联的这两种文件类型的任何可执行文件自动执行.reg文件和.msi文件.
.NET核2.0的Process.Start(字符串文件名)文档说:"文件名并不需要代表一个可执行文件它可以是任何一种扩展已经安装在系统上的应用程序相关的任何类型的文件."
然而
using(var proc = Process.Start(@"C:\Users\user2\Desktop\XXXX.reg")) { } //.msi also
Run Code Online (Sandbox Code Playgroud)
给我
System.ComponentModel.Win32Exception (0x80004005): The specified executable is not a valid application for this OS platform.
at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start()
at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start(String fileName)
Run Code Online (Sandbox Code Playgroud)
使用ErrorCode和HResult -2147467259,以及NativeErrorCode 193.
相同的代码在.Net Framework 3.5或4控制台应用程序中工作.
我不能指定精确的exe文件路径作为方法的参数,因为用户的环境是变体(包括Windows版本)并且不受我的控制.这也是为什么我需要将程序移植到.Net Core,尝试使其作为SCD控制台应用程序工作,以便不需要安装特定的.Net Framework或.NET Core版本.
Visual Studio调试运行和发布为win-x86 SCD时都会抛出异常.我的电脑是Win7 64bit,我确信.reg和.msi与常规程序一样,与Windows PC一样.
有解决方案吗?任何帮助表示赞赏.
如何确定与特定扩展相关联的应用程序(例如.JPG),然后确定该应用程序的可执行文件所在的位置,以便可以通过调用System.Diagnostics.Process.Start(...)来启动它.
我已经知道如何读写注册表了.注册表的布局使得更难以以标准方式确定哪些应用程序与扩展相关联,哪些显示名称以及它们的可执行文件所在的位置.
我需要一种方法来打开一个通用文件与该文件的默认应用程序.
例如:如果文件是HTML文件,则将使用Internet Explorer打开; 如果文件是图像(JPG,BMP等),那么它将以"Paint"打开; 如果文件是MP3文件,则将使用Windows Media Player打开.
我怎样才能做到这一点 ?我必须使用什么功能或API?
可能重复:
如何在C#中启动文件
我的意思是说有一个word文档并运行一个函数来在Microsoft Word等中打开它.