>

VB.net으로 작성된 다른 기존 응용 프로그램에서 열 수있는 C # WPF 응용 프로그램이 있습니다. C # 응용 프로그램이 진행되는 한 Google에서 조사하고 다른 사람의 답변을 사용하는 동안 얻을 수있는 두 가지 방법으로 전달되는 명령 줄 매개 변수를 얻는 방법을 알고 있다고 생각합니다.

App.xaml 헤더

<Application x:Class="ChallengeHandler.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:local="clr-namespace:ChallengeHandler"
         Startup="Application_Startup">

App.xaml.cs 방법 1

   private void Application_Startup(object sender, StartupEventArgs e)
    {
        string[] args = Environment.GetCommandLineArgs();
        if (args.Length < 1)
        {
            MessageBox.Show("No parameter provided. Failed to run.");
            Shutdown();
        }
        else
        {
            MainWindow wnd = new MainWindow(args[0]);
            wnd.Show();
        }
    }

위의 방법으로 응용 프로그램이 열리지 만 매개 변수에 의존하는 데이터는 채워지지 않습니다. 따라서 뷰의 콤보 상자와 항목은 비어 있습니다. 실패합니다.

App.xaml.cs 방법 2

   private void Application_Startup(object sender, StartupEventArgs e)
    {
        if (e.Args.Length < 1)
        {
            MessageBox.Show("No parameter provided. Failed to run.");
            Shutdown();
        }
        else
        {
            MainWindow wnd = new MainWindow(e.Args[0]);
            wnd.Show();
        }
    }

이 메소드는 인수가 비어있을 때마다 오류 메시지 상자를 보여줍니다.

VB.NET 응용 프로그램에서 응용 프로그램을 열고 거기에서 문자열 매개 변수를 c # 응용 프로그램에 전달하려고 할 때 문제가 있다고 생각합니다. 그러나 VB.net 코드에서 명령 줄 매개 변수와 같은 문자열을 전달하는 방법에 대한 아이디어가 없습니다. VB.net 애플리케이션에서 전화 걸기

   Dim sPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Programs) + "\Microsoft\ChallengeHandler.appref-ms"
    Dim pHelp As New ProcessStartInfo
    If System.IO.File.Exists(sPath) Then
        pHelp.FileName = sPath
        pHelp.Arguments = "097"
        pHelp.UseShellExecute = True
        pHelp.WindowStyle = ProcessWindowStyle.Normal
        Dim proc As Process = Process.Start(pHelp)
    End If

나는 VB 코드를 시도하지 않고

pHelp.UseShellExecute = True
pHelp.WindowStyle = ProcessWindowStyle.Normal

아무 소용이없는

;쉘 실행이 매개 변수를 명령 줄 매개 변수로 강제 실행하기를 희망하여 추가했습니다. 나는 또한 이것을 VB에서 시도했다. 두 번째 VB 방법

   Dim sPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Programs) + "\Microsoft\ChallengeHandler.appref-ms"
    If System.IO.File.Exists(sPath) Then
        System.Diagnostics.Process.Start(sPath, "097")
    End If

모든 통찰력은 대단히 감사하겠습니다! 감사합니다.

  • 답변 # 1

    "\ Microsoft \ ChallengeHandler.appref-ms"를 사용하고 있습니다. 이것은 ClickOnce 응용 프로그램입니다. ClickOnce 응용 프로그램의 매개 변수를 얻는 것은 일반 응용 프로그램과 완전히 다릅니다. 검색하려면 ApplicationDeployment.CurrentDeployment.ActivationUri.Query 및 HttpUtility.ParseQueryString을 사용해야합니다.

    본인을 보내려면 "? param = value"를 사용하여 시작 URL에 추가해야합니다. 웹 페이지에서만 시작하려고했지만 이것이 어떻게 작동하는지 잘 모르겠습니다.

    현재 사용중인 방법은 일반 응용 프로그램에 유효합니다. exe를 찾아서 직접 실행할 수 있다면 괜찮을 것입니다.

  • 답변 # 2

    2 개의 프로젝트를 만들었습니다 : Line command C # invoker and WPF Test application;

    Program.cs의 호출자 코드 :

       namespace WPFInvoker
        {
            class Program
            {
                static void Main(string[] args)
                {
                    Process.Start(@"C:\Users\...\bin\Debug\WPF_Test.exe", "example_parameter");
                }
            }
        }
    
    

    WPF App.xaml에서 시작 이벤트 app_Startup과 MainWindow.xaml의 기본 형식이 있습니다.

       <Application x:Class="WPF_Test.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:WPF_Test"
             Startup="app_Startup"
             StartupUri="MainWindow.xaml">
            <Application.Resources>
            </Application.Resources>
        </Application>
    
    

    App.xaml.cs 코드는 다음과 같습니다.

       namespace WPF_Test
        {
            /// <summary>
            /// Interaction logic for App.xaml
            /// </summary>
            public partial class App : Application
            {
                void app_Startup(object sender, StartupEventArgs e)
                {
                    if (e.Args != null && e.Args.Length > 0)
                    {
                        MessageBox.Show(e.Args[0]);
                    }
                    else
                    {
                        MessageBox.Show("e.Args is null");
                    }
                }
            }
        }
    
    

    WPFTest.exe를 두 번 클릭하면 "e.Args is null"이라는 메시지가있는 MessageBox가 표시됩니다.

    매개 변수가없는 응용 프로그램

    하지만 WPFInvoker를 통해 WPFTest 응용 프로그램을 열면 :

    매개 변수가있는 응용 프로그램

    마지막으로 MessageBox와 MainWindow.xaml을 닫습니다.

관련 자료

  • 이전 Redshift SQL의 다른 열에 대한 조건에 따라 열에서 문자 제거
  • 다음 c # - 텍스트 상자를 객체 속성에 바인딩