#windows-store-apps #windows-8.1
#windows-store-приложения #windows-8.1
Вопрос:
Мне нужно запустить команду из приложения магазина Windows?
команда выглядит примерно так : java -jar abc.jar
Как я могу это сделать?
Редактировать :
Я пробовал это, но безуспешно. Он говорит, что файл не найден.
string exeFile = @"C:DATAstart.bat";
var file = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(exeFile);
if (file != null)
{
// Set the option to show the picker
var options = new Windows.System.LauncherOptions();
options.DisplayApplicationPicker = true;
// Launch the retrieved file
bool success = await Windows.System.Launcher.LaunchFileAsync(file, options);
if (success)
{
// File launched
}
else
{
// File launch failed
}
}
Комментарии:
1. Приложения магазина Windows запускаются в изолированной среде. Я не думаю, что вы сможете запустить java-команду
2. Могу ли я не выполнить командный файл, содержащий эту команду?
Ответ №1:
Контейнер приложений блокирует это поведение для приложений магазина.
Прежде всего, вы пытаетесь получить файл StorageFile через папку package InstalledLocation, которая не будет работать. InstalledLocation — это папка хранения, и ее GetFileAsync ищет файлы только в этой непосредственной папке. Вот почему он возвращает файл, который не найден.
API, который принимает произвольный путь, — это Windows.Хранение.StorageFolder.GetFileFromPathAsync. Однако ваша возможность доступа к файлам ограничена контейнером приложения. Вы можете получить доступ к файлам в папке пакета или расположениям данных приложения по умолчанию, или к различным медиа-библиотекам, если вы объявили доступ в манифесте, но в противном случае вам придется пройти через средство выбора файлов, чтобы пользователь знал, что вы делаете, и мог дать согласие. Проще говоря, это единственный способ получить доступ к файлу в таком месте, как c:data . Вы можете поиграть с этим, используя сценарий 1 примера запуска ассоциации и кнопку «Выбрать и запустить».
Если вы можете получить это разрешение на доступ, то в вы сможете запустить файл, если это не заблокированный тип файла. Файлы данных (например, .docx), связанные с другим приложением, работают просто отлично, но исполняемые файлы полностью заблокированы по очевидным соображениям безопасности. Вы можете попробовать это с помощью примера, на который я ссылался выше — выберите .bat, .cmd, .exe, .msi и т. Д., И вы увидите, что LaunchFileAsync завершается с ошибкой.
Также обратите внимание, что другая функция запуска, LaunchUriAsync, также блокирует file:/// по тем же причинам.