Enable/Disable C# 中的启动任务

Enable/Disable StartupTask in C#

我想就如何使以下内容成为可能提出一些建议:

需要的功能:我想为用户提供启用和禁用我正在构建的桌面桥应用程序的启动设置的选项,而该应用程序是 运行。理想情况下,当通过上下文菜单按下按钮时,会弹出一个小表单 window,为用户提供两个选项。 'yes' 或 'no' 按钮是应用程序是否应在系统下次重启时自动启动的两个选项。

使用的技术:我将应用程序构建为 winform 应用程序,并通过桌面桥接功能将其制作成 uwp 应用程序。我这样做是因为它最终会出现在 windows 应用商店中。

参考:我正在参考一个名为 StartupTask 的 API,我在这个站点找到了它: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

我将 Windows(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 个启动应用程序 window 中,显示该应用程序是打开还是关闭。

我尝试了多种不同的方法,但都没有成功。也许我忽略了一些事情,所以有一个外部视角会有所帮助。

使用应用程序清单扩展代码,应用程序会在系统启动时自动启动。

我知道用户可以通过启动应用 window 或任务管理器打开或关闭应用。但此功能是客户端的要求。

如有任何建议,我们将不胜感激。

感谢阅读~

  <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();
}