UWP_Can无法使用StartupTask类启动应用程序?

时间:2018-03-28 09:37:46

标签: c# uwp windows-10 win-universal-app windows-10-universal

我按照这篇文章在系统重启时启动我的UWP应用程序。

https://docs.microsoft.com/en-us/uwp/api/windows.applicationmodel.startuptask#uwp-app-startup-task-extension

更新
我也试过那篇文章,在该样本Configure your app to start at log-in中使用了完全源代码 以下是现象:
- 当我在UWP应用程序的主页面上单击“请求启用启动”按钮时,它会将“启动状态”显示为“已启用”。 - 我检查了任务管理器,这个应用程序在启动列表中启用 - 重新启动PC并登录后,此应用程序立即启动并最小化到任务栏 - 当我点击任务栏上的应用程序图标时,该应用程序仅显示启动画面 - 我离开应用程序几分钟,它突然关闭,没有任何通知 我可以将我的应用程序注册到启动列表,但在我登录后,我的应用程序不会自动启动作为我的意图。它总是如下图 enter image description here enter image description here 有人有同样的问题吗?我真的需要一些帮助。感谢。

2 个答案:

答案 0 :(得分:1)

official document开始,UWP App启动任务扩展名为

<Package xmlns:uap5="http://schemas.microsoft.com/appx/manifest/uap/windows10/5" ...>
...
<Applications>
    <Application ...>
        ...
        <Extensions>
          <uap5:Extension Category="windows.startupTask">
            <uap5:StartupTask
              TaskId="MyStartupId"
              Enabled="false"
              DisplayName="Test startup" />
          </uap5:Extension>
      </Extensions>
    </Application>
</Applications>

您可以直接复制到您应用的Package.appxmanifest。它在我身边起作用。请注意,当您的应用在启动时启动时,它将在任务栏中启动最小化。

如果您在Configure your app to start at log-in博客中使用启动任务扩展,则需要将ExecutableEntryPoint属性修改为等于应用程序的EntryPoint属性。请注意,请避免在$targetnametoken$.exe中使用Extension通配符。

<Extensions>
  <uap5:Extension
    Category="windows.startupTask"
    Executable="StartUpTest.exe"
    EntryPoint="StartUpTest.App">
    <uap5:StartupTask
      TaskId="MyStartupId"
      Enabled="false"
      DisplayName="Test startup" />
  </uap5:Extension>
</Extensions>

答案 1 :(得分:1)

如果你的应用程序停留在启动状态,这通常意味着你的代码没有调用Window.Activate()。

确保为ActivationKind.StartupTask实现OnActivate(),如下所示:

protected override void OnActivated(IActivatedEventArgs args)
{
    Frame rootFrame = Window.Current.Content as Frame;
    if (rootFrame == null)
    {
        rootFrame = new Frame();
        Window.Current.Content = rootFrame;
    }

    string payload = string.Empty;
    if (args.Kind == ActivationKind.StartupTask)
    { 
        var startupArgs = args as StartupTaskActivatedEventArgs;
        payload = ActivationKind.StartupTask.ToString();
    }

    rootFrame.Navigate(typeof(MainPage), payload);
    Window.Current.Activate();
}