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

时间:2018-08-18 18:50:03

标签: c# wpf uwp startup

我有一个打包的WPF应用程序,可以在Microsoft Store中提交它。我使用StartupTask extension在系统启动时运行它。

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>

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

<uap5:StartupTask Argument="/autostart" ... />

然后我可以在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...
}

问题是,我是否可以使用此StartupTask来检查WPF应用程序中是否在系统启动时启动了程序?系统启动启动器是否将任何事件或属性附加到我的应用程序或其启动参数中以检查启动情况?

1 个答案:

答案 0 :(得分:1)

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

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

  

这些API来自{​​{1}}和Windows.ApplicationModel.dll程序集,您无法将它们添加到WPF应用程序中

可以。确保已安装the latest SDK并添加对Windows.dll的引用。

然后,您可以在WPF应用中调用这样的方法:

C:\Program Files (x86)\Windows Kits\10\References\10.0.17134.0\Windows.Foundation.UniversalApiContract\6.0.0.0\Windows.Foundation.UniversalApiContract.winmd