Включить / отключить StartupTask в C# - PullRequest
1 голос
/ 09 апреля 2020

Я хотел бы попросить несколько советов о том, как сделать следующее ниже возможным:

Требуемая функциональность: я хочу дать пользователям возможность включать и отключать параметр запуска для приложения настольного моста I строю пока приложение работает. В идеале при нажатии кнопки через контекстное меню появляется маленькое окно формы, предоставляющее пользователю две опции. Кнопки «да» или «нет» являются двумя вариантами того, должно ли приложение запускаться автоматически во время загрузки для следующего перезапуска системы.

Используемые технологии: я создал приложение как приложение winform и сделал это в приложение UWP через функциональность настольного моста. Я сделал это, потому что в конечном итоге он будет в магазине приложений windows.

Ссылки: есть API, на который я ссылаюсь, который называется StartupTask, который я нашел на этом сайте: https://docs.microsoft.com/en-us/uwp/api/windows.applicationmodel.startuptask#properties

У меня уже есть это в моем файле Package.appxmanifest:

<Extensions>
<desktop:Extension
Category="windows.startupTask"
Executable="uniqueFolder\myExeFile.exe"
EntryPoint="Windows.FullTrustApplication">
<desktop:StartupTask
TaskId="myAppTaskID"
Enabled="true"
DisplayName="MyAppDisplayName" />
</desktop:Extension>
</Extensions>

Я успешно добавил эти ссылки:

-Windows(Windows.winmd)
-System.Runtime.WindowsRuntime(WindowsRuntime.dll)
-Windows.ApplicationModel.StartupTaskContract
-Windows.Foundation.FoundationContract

Я изменил ссылку для * Псевдоним 1041 * (Windows .winmd) может отличаться от 'global', чтобы избежать ошибки компилятора:

StateError The type 'StartupTaskContract' exists in both '...' and '...'.

Следующий код c# является попыткой начать работу с этой функцией с помощью пытаюсь получить startuptaskId для приложения, которое, к сожалению, выдает ошибку.

C# код:

async void MyFunct()
{
StartupTask startupTask = await StartupTask.GetAsync("myAppTaskID");
}

Ошибка компилятора, которую я сейчас получаю:

StateError CS1929 'IAsyncOperation<StartupTask>' does not contain a definition for 'GetAwaiter' and the best extension method overload 'WindowsRuntimeSystemExtensions.GetAwaiter(IAsyncAction)' requires a receiver of type 'IAsyncAction'

Наконец, эта функция включения и отключения должна быть отражена в окне Windows 10 Startup Apps, показывающем, что приложение включено или выключено.

Я пробовал несколько разных вещей, но безуспешно. Возможно, я пропускаю некоторые вещи, поэтому было бы полезно иметь внешнюю перспективу.

С кодом расширения манифеста приложения приложение автоматически загружается при запуске системы.

Я знаю, что пользователи можно просто включить или отключить приложение через окно запуска приложения или диспетчер задач. Но эта функциональность является требованием для клиента.

Любые предложения будут высоко оценены.

Спасибо за чтение ~

1 Ответ

0 голосов
/ 09 апреля 2020

пакетов

  <package id="Antlr" version="3.4.1.9004" targetFramework="net452" />
  <package id="bootstrap" version="3.0.0" targetFramework="net452" />
  <package id="jQuery" version="1.10.2" targetFramework="net452" />
  <package id="jQuery.Validation" version="1.11.1" targetFramework="net452" />
  <package id="Microsoft.AspNet.Identity.Core" version="2.2.1" targetFramework="net452" />
  <package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net452" />
  <package id="Microsoft.AspNet.Razor" version="3.2.3" targetFramework="net452" />
  <package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net452" />
  <package id="Microsoft.AspNet.WebPages" version="3.2.3" targetFramework="net452" />
  <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net452" />
  <package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.2.3" targetFramework="net452" />
  <package id="Microsoft.Net.Compilers" version="1.0.0" targetFramework="net452" developmentDependency="true" />
  <package id="Microsoft.Rest.ClientRuntime" version="2.3.2" targetFramework="net452" />
  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net452" />
  <package id="Modernizr" version="2.6.2" targetFramework="net452" />
  <package id="Newtonsoft.Json" version="6.0.8" targetFramework="net452" />
  <package id="Respond" version="1.2.0" targetFramework="net452" />
  <package id="WebGrease" version="1.5.2" targetFramework="net452" />

использования

using System;
using System.Collections;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Rest;

метод

void MyFunct()
{

   Task.Factory.StartNew(s => StartupTask.GetAsync("myAppTaskID"), this, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default).GetAwaiter();

// or 

   StartupTask.GetAsync("myAppTaskID").wait();
}
...