Я использую проект UWP для запуска приложений win32, разработанных с помощью Qt, но мне нужно передать некоторые параметры (аргументы). Если я запускаю (.exe) без параметров, он работает. Я новичок в UWP
Спасибо за вашу помощь.
Я пытался использовать этот код, но безуспешно.
ApplicationData.Current.LocalSettings.Values["Parameters"] = tbParameters.Text;
await FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync("Parameters"); //Parameters
Предполагая, что я правильно понял ваш вопрос, пожалуйста, взгляните на следующее.
Вы не можете передавать параметры из 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) Потяните параметры из LocalSettings в приложение Win32, когда оно запустится, как указано выше.
4) Запустите сторонний файл .exe из приложения Win32 с указанными параметрами, например, следующим образом...
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
В консольном приложении все ОК, а в графическом НЕ РАБОТАЕТ, т.к. класс Process не распознается,
Да, конечно, я просто поделился своим примером, используя консольное приложение в качестве эталона. Рад, что это сработало для вас, если бы вы могли отметить этот ответ как правильный, чтобы он мог помочь будущим пользователям, это было бы здорово :)
Спасибо @Adam McMahon, к сожалению, я еще не решил свою проблему. Я создал консольное решение в том же проекте uwp, но не смог запустить консольное приложение с кнопки. в консольном приложении мне удалось запустить исполняемый файл с параметром, благодаря вашей помощи. вкратце: 1) app1 типа uwp -> нажать на кнопку запускающую app2 типа console. Я застрял здесь, я не знаю, как это сделать. 2) app2 -> автоматически запускать внешнее app3 с параметром.
ЭТО РАБОТАЕТ, СПАСИБО ЗА ПОМОЩЬ
Рад помочь. Не могли бы вы отметить это как правильное, чтобы помочь будущим пользователям :)
вот еще одно решение: Process.Start(@path.exe", параметр);