假设我正确理解您的问题,请查看以下内容。
您不能将参数从 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 应用程序是 3rd 方,因此您无法修改代码),那么您仍然可以使用上述代码来达到相同的结果。
1) 创建一个新的 Win32 应用(我的示例使用控制台应用)
2) 像上面一样将参数从 UWP 传递到 LocalSettings。
3) 在 Win32 应用启动后,将参数从 LocalSettings 拉入,如上。
4) 从您的 Win32 应用程序启动您的第 3 方 .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