检查打包的 WPF 应用程序是随启动运行还是手动运行?

0xa*_*yan 5 c# wpf startup uwp

我有一个已打包的 WPF 应用程序,以便能够在 Microsoft Store 中提交它。我使用StartupTask 扩展在系统启动时运行它。

Package.appmanifest(在解决方案的Package项目中):

<Extensions>
  <uap5:Extension Category="windows.startupTask" Executable="*PathToExecutable*" EntryPoint="Windows.FullTrustApplication">
    <uap5:StartupTask TaskId="MyAppStartupTaskId" Enabled="true" DisplayName="Title in TaskManager" />
  </uap5:Extension>
</Extensions>
Run Code Online (Sandbox Code Playgroud)

问题是启动运行时没有Argument可设置的属性,如下所示:

<uap5:StartupTask Argument="/autostart" ... />
Run Code Online (Sandbox Code Playgroud)

然后我可以在事件中做这样的事情Application_Startup

App.xaml.cs(在解决方案的Application项目中):

private void Application_Startup(object sender, StartupEventArgs e)
{
    // Check if application is running by startup
    if (e.Args.Length > 0 && e.Args[0] == "/autostart")
    {
        LaunchMinimized = true;
    }
    // Lots of bla bla blas here...
}
Run Code Online (Sandbox Code Playgroud)

问题是我可以用这个StartupTask东西检查WPF应用程序中的程序是否随系统启动而启动吗?系统启动启动器是否将任何事件或属性附加到我的应用程序或其启动参数以检查启动情况?

mm8*_*mm8 3

恐怕您无法为启动任务指定参数,但如果您的目标是 Windows 10 版本 18.03 或更高版本,您可以使用 AppInstance.GetActivatedEventArgs 方法获取一个参数IActivatedEventArgs,然后检查其Kind属性以确定应用程序是否是从一个启动任务。

另一种选择是从启动任务启动不同的 .EXE。

这些 API 来自您无法将其添加到 WPF 应用程序的程序Windows.ApplicationModel.dllWindows.dll

你当然可以。确保您已安装最新的 SDK并添加对C:\Program Files (x86)\Windows Kits\10\References\10.0.17134.0\Windows.Foundation.UniversalApiContract\6.0.0.0\Windows.Foundation.UniversalApiContract.winmd.

然后您可以在 WPF 应用程序中调用如下方法:

Windows.ApplicationModel.Activation.IActivatedEventArgs args = Windows.ApplicationModel.AppInstance.GetActivatedEventArgs();
Run Code Online (Sandbox Code Playgroud)