Установить путь для протокола URL в C#

Поэтому я создал протокол URL для запуска приложения с аргументами команды.

Вот мой код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Microsoft.Win32;
using System.Diagnostics;

namespace iw4Protocol
{
    class Program
    {
        static void Main(string[] args)
        {
            RegistryKey key = Registry.ClassesRoot.OpenSubKey("gameProtocol");

            if (key == null)
            {
                string iw4FullPath = Directory.GetCurrentDirectory();

                gameProtocol protocol = new gameProtocol();
                protocol.RegisterProtocol(gameFullPath);
            }
            else
            {
                RegistryKey gamepathkey = Registry.ClassesRoot.OpenSubKey("gameProtocol");
                string gamepath = gamepathkey.GetValue("gamepath").ToString();

                Environment.SetEnvironmentVariable("path",gamepath);



                ProcessStartInfo startInfo = new ProcessStartInfo();
                startInfo.FileName = @"test.exe";
                startInfo.Arguments = Environment.CommandLine;
                Process.Start(startInfo);
            }
        }
    }
}

Проблема в том, что программе для запуска требуются некоторые файлы, но она не может их загрузить, потому что путь не установлен.

Как я могу установить этот путь для запуска всех этих необходимых файлов (например, /cd команда)?

1 ответ

Если вы хотите установить переменную окружения PATH и использовать ее в своем процессе, добавьте ее в переменные окружения, но вы должны установить UseShellExecute ложно в этом случае:

ProcessStartInfo startInfo = new ProcessStartInfo();
// set environment
startInfo.UseShellExecute = false;
startInfo.EnvironmentVariables["PATH"] += ";" + gamepath;
// you might need more Environment vars, you're on your own here...
// start the exe
startInfo.FileName = @"test.exe";
startInfo.Arguments = Environment.CommandLine;

// added for debugging

startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;


var p = new Process();
p.StartInfo = startInfo;

using(var sw = new StreamWriter(File.Create("c:\\temp\\debug.txt"))) // make sure C:\temp exist
{
    p.OutputDataReceived += (sender, pargs) => sw.WriteLine(pargs.Data);
    p.ErrorDataReceived += (sender, pargs) => sw.WriteLine(pargs.Data);

    p.Start();
    p.BeginOutputReadLine();
    p.BeginErrorReadLine();

    p.WaitForExit();
}
Другие вопросы по тегам