Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.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#_.net_Shell - Fatal编程技术网

C# 如何在C中启动文件#

C# 如何在C中启动文件#,c#,.net,shell,C#,.net,Shell,-编辑-我觉得自己像个白痴。我有一种感觉,下面的答案会有用,但没有看到任何类似于下面答案的谷歌结果。所以,当我看到这个复杂的代码时,我想它一定是这样的 我搜索并找到了这个,但它没有回答我的问题。通过下面的调整,我得出了以下结论。但是,它会被图像文件卡住。Txt文件运行正常 我将很快更新此代码,以说明应用程序路径与空格,但我不明白为什么图像文件不启动 static void launchFile(string fn) { //majority was taken from //ht

-编辑-我觉得自己像个白痴。我有一种感觉,下面的答案会有用,但没有看到任何类似于下面答案的谷歌结果。所以,当我看到这个复杂的代码时,我想它一定是这样的

我搜索并找到了这个,但它没有回答我的问题。通过下面的调整,我得出了以下结论。但是,它会被图像文件卡住。Txt文件运行正常

我将很快更新此代码,以说明应用程序路径与空格,但我不明白为什么图像文件不启动

static void launchFile(string fn)
{
    //majority was taken from
    //https://stackoverflow.com/questions/24954/windows-list-and-launch-applications-associated-with-an-extension
    const string extPathTemplate = @"HKEY_CLASSES_ROOT\{0}";
    const string cmdPathTemplate = @"HKEY_CLASSES_ROOT\{0}\shell\open\command";

    string ext = Path.GetExtension(fn);

    var extPath = string.Format(extPathTemplate, ext);

    var docName = Registry.GetValue(extPath, string.Empty, string.Empty) as string;
    if (!string.IsNullOrEmpty(docName))
    {
        // 2. Find out which command is associated with our extension
        var associatedCmdPath = string.Format(cmdPathTemplate, docName);
        var associatedCmd = Registry.GetValue(associatedCmdPath, string.Empty, string.Empty) as string;

        if (!string.IsNullOrEmpty(associatedCmd))
        {
            //Console.WriteLine("\"{0}\" command is associated with {1} extension", associatedCmd, ext);
            var p = new Process();
            p.StartInfo.FileName = associatedCmd.Split(' ')[0];
            string s2 = associatedCmd.Substring(p.StartInfo.FileName.Length + 1);
            s2 = s2.Replace("%1", string.Format("\"{0}\"", fn));
            p.StartInfo.Arguments = s2;//string.Format("\"{0}\"", fn);
            p.Start();
        }
    }
}
使用:


它将使用默认程序打开,就像您刚刚单击它一样。诚然,它不允许您选择将运行的程序。。。但是,假设您想要模仿用户双击文件时所使用的行为,那么这应该可以正常工作。

听起来您需要更多的信息:

System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.EnableRaisingEvents = false;
proc.StartInfo.FileName = "<whatever>";
proc.Start();
System.Diagnostics.Process proc=new System.Diagnostics.Process();
proc.EnableRaisingEvents=false;
proc.StartInfo.FileName=“”;
proc.Start();

假设您只想启动已经有一些关联应用程序的文件(例如:*.txt与记事本关联), 使用System.Diagnostics.Process

e、 g:

 using System.Diagnostics;
    Process p = new Process();
    ProcessStartInfo pi = new ProcessStartInfo();
    pi.UseShellExecute = true;
    pi.FileName = @"MY_FILE_WITH_FULL_PATH.jpg";
    p.StartInfo = pi;

    try
    {
        p.Start();
    }
    catch (Exception Ex)
    {
        //MessageBox.Show(Ex.Message);
    }

注意:在我的电脑中,pic在Windows Picture&Fax Viewer中打开,因为这是*.jpg文件的默认应用程序。

Aww,你刚刚击败了我:)你想用特定程序打开它吗,我想用“Windows PowerShell ISE”打开它很好。如果您试图在命令行上为这些图像文件编写调试语句,那么这些图像文件会发生什么情况?是否只想在Windows中启动文件?
 using System.Diagnostics;
    Process p = new Process();
    ProcessStartInfo pi = new ProcessStartInfo();
    pi.UseShellExecute = true;
    pi.FileName = @"MY_FILE_WITH_FULL_PATH.jpg";
    p.StartInfo = pi;

    try
    {
        p.Start();
    }
    catch (Exception Ex)
    {
        //MessageBox.Show(Ex.Message);
    }