Process.Start () 파일을 찾을 수 없습니까? [복제]

Aug 30 2020

어시스턴트를 만들고 있는데 애플리케이션을 열고 싶습니다. chrome.exe (Chrome) 및 devenv.exe (Visual Studio) 인 특정 애플리케이션 만 엽니 다.

Spotify.exe (Spotify), Discord.exe (Discord), obs64.exe (OBS Studio) 및 Steam.exe (Steam)의 4 가지 응용 프로그램이 더 있습니다. 어시스턴트에게 다음과 같은 특정 앱을 열도록 지시하면 오류가 발생합니다.

"System.ComponentModel.Win32Exception : '시스템이 지정된 파일을 찾을 수 없습니다.'".

오류는 이러한 모든 응용 프로그램에서 동일합니다. 이것은 내 코드입니다.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Speech.Synthesis;
using System.Speech.Recognition;
using System.Media;
using System.Diagnostics;

namespace Assistant
{
    public partial class Form1 : Form
    {
        SpeechSynthesizer ZeroTwo;
        SpeechRecognitionEngine ZeroTwoEars;
        SoundPlayer ZeroTwoGreeting;
        Grammar ZeroTwoGrammar;

        bool ZeroTwoSearch = false;

        public Form1()
        {
            InitializeComponent();

            // Sound player

            ZeroTwoGreeting = new SoundPlayer(@"c:/Users/User/Desktop/Zero Two Sound Files/dahling ohaio.wav");

            // Speech Synthesizer

            ZeroTwo = new SpeechSynthesizer();      

            // Speech Recognition

            ZeroTwoEars = new SpeechRecognitionEngine();
            Choices list = new Choices();

            list.Add(new string[] { 

                // Greetings

                "Ohaio, zero two",

                // Google search

                "Zero two, search for",

                // Open apps

                "Zero two, open discord",
                "Zero two, open google",
                "Zero two, open visual studio",
                "Zero two, open spotify",
                "Zero two, open steam",
                "Zero two, open obs"
            } );

            ZeroTwoGrammar = new Grammar(new GrammarBuilder(list));

            try
            {

                ZeroTwoEars.RequestRecognizerUpdate();

                ZeroTwoEars.LoadGrammar(ZeroTwoGrammar);

                ZeroTwoEars.SpeechRecognized += ZeroTwoEars_SpeechRecognized;

                ZeroTwoEars.SetInputToDefaultAudioDevice();

                ZeroTwoEars.RecognizeAsync(RecognizeMode.Multiple);

            }
            catch { }

        }
        private void ZeroTwoEars_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {
            String ZamdiesLines = e.Result.Text;
            button1.Text = ZamdiesLines;

            if (ZeroTwoSearch == true)
            {
                ZeroTwoGreeting.Play();
                Process.Start("https://www.google.com/search?q=" + ZamdiesLines);
                button1.Text = "Searched!";
                ZeroTwoSearch = false;
            }

            if (ZamdiesLines == "Zero two, search for")
            {
                ZeroTwoSearch = true;
                ZeroTwoGreeting.Play();
                button1.Text = "fired!";
            }

            if (ZeroTwoSearch == false)
            {
                switch (ZamdiesLines)
                {


                    case ("Ohaio, zero two"):
                        ZeroTwoGreeting.Play();
                        break;


                    case ("Zero two, open discord"):
                        ZeroTwoGreeting.Play();
                        Process.Start("Discord.exe");
                        break;


                    case ("Zero two, open google"):
                        ZeroTwoGreeting.Play();
                        Process.Start("chrome.exe");
                        break;


                    case ("Zero two, open visual studio"):
                        ZeroTwoGreeting.Play();
                        Process.Start("devenv.exe");
                        break;


                    case ("Zero two, open spotify"):
                        ZeroTwoGreeting.Play();
                        Process.Start("Spotify.exe");
                        break;


                    case ("Zero two, open steam"):
                        ZeroTwoGreeting.Play();
                        Process.Start("Steam.exe");
                        break;


                    case ("Zero two, open obs"):
                        ZeroTwoGreeting.Play();
                        Process.Start("obs64.exe");
                        break;
                }
            }
        }
    }
}

답변

1 EfthymiosKalyviotis Aug 30 2020 at 06:17

Chrome.exe 및 Devenv.exe가 자동으로 실행되는 이유는 두 응용 프로그램의 경로 (상주하는 폴더)가 시스템 Path환경 변수에 선언되어 있기 때문 입니다. 이를위한 두 가지 해결책이 있습니다.

  1. Discoord.exe 응용 프로그램의 전체 경로를 설정하여 호출해야합니다 . 예 :

    Process.Start ( "C : \\ Users \\ AppData \\ Local \\ Discord \\ app-0.0.307 \\ Discord.exe");

  2. 컴퓨터 시스템에서 환경 경로를 설정하십시오. 예. 다음 스크린 샷을보십시오.