如何使用UWP项目中的4个参数启动Win32可执行桌面

时间:2019-05-29 12:21:31

标签: c# uwp

我正在使用UWP项目启动使用Qt开发的Win32应用程序,但是我需要传递一些参数(参数)。如果我启动不带参数的(.exe),它将起作用。 我是UWP的初学者

感谢您的帮助。

我尝试使用此代码,但未成功。

ApplicationData.Current.LocalSettings.Values["Parameters"] = tbParameters.Text;            
           await FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync("Parameters"); //Parameters

1 个答案:

答案 0 :(得分:0)

假设我正确理解了您的问题,请查看以下内容。

您不能将参数从UWP直接传递到Win32应用程序。您要做的是先将参数存储在程序包LocalSettings中,然后在Win32应用程序中检索它们。

这是我的代码,用于将四个字符串保存到LocalSettings,以便稍后可以在Win32应用程序中检索它们。再一次,请注意,我们并没有直接传递它们,我们只是将它们保存在LocalSettings中,只要Win32应用包含在我们的软件包中,它就可以访问

public static async void PrintFile(String string1, String, string2 String, string3 String string4 )
{

    ApplicationData.Current.LocalSettings.Values["param1"] = string1;
    ApplicationData.Current.LocalSettings.Values["param2"] = string2;
    ApplicationData.Current.LocalSettings.Values["param3"] = string3;
    ApplicationData.Current.LocalSettings.Values["param4"] = string4;                

    if (ApiInformation.IsApiContractPresent("Windows.ApplicationModel.FullTrustAppContract", 1, 0))
    {
        try
        {
            await FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync();
        }

        catch (Exception Ex)
        {
            Debug.WriteLine(Ex.ToString());
        }
    }
}

然后在Win32应用程序中,只需添加以下内容,即可从LocalSettings中检索参数。

static void Main(string[] args)
{
    string string1 = ApplicationData.Current.LocalSettings.Values[@"param1"] as string;
    string string2 = ApplicationData.Current.LocalSettings.Values[@"param2"] as string;
    string string3 = ApplicationData.Current.LocalSettings.Values[@"param3"] as string;
    string string4 = ApplicationData.Current.LocalSettings.Values[@"param4"] as string;
}

编辑

如果由于某种原因这是不可行的解决方案(也许Win32应用是第三方,因此您不能修改代码),那么您仍然可以使用上面的代码来达到相同的结果。

1)创建一个新的Win32应用程序(我的示例使用控制台应用程序)

2)将参数从UWP传递到如上所述的LocalSettings。

3)如上所述,在启动Win32应用程序后,将参数从LocalSettings拖入Win32应用程序。

4)使用指定的参数从Win32应用程序启动您的3rd party .exe文件,类似以下内容...

private static Process CreateProcess(string exePath, string parameter)
{
    return new Process
    {
        StartInfo =
            {
                WindowStyle = ProcessWindowStyle.Hidden,
                FileName = $@"""{exePath}""",
                Arguments = $@"""{parameter}""",
                UseShellExecute = false,
                CreateNoWindow = true
            }
    };
}

编辑2

为完整起见,LocalSettings存储在您的应用程序包文件夹中,可以在这里进行检索:C:\Users\"UserName"\AppData\Local\Packages\"PackageName"\Settings\settings.DAT