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

im9ewurl  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(170)

我有一个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>

问题是在使用startup运行时,没有Argument属性可供设置,如下所示:

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

然后我可以在Application_Startup事件中执行如下操作:

  • App.xaml.cs(在解决方案的应用程序项目中):*
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应用程序中的程序是否随系统启动启动而启动?系统启动启动程序是否会将任何事件或属性附加到我的应用程序或其启动参数以检查启动?

nhaq1z21

nhaq1z211#

恐怕您无法为启动任务指定参数,但如果您的目标是Windows 10版本18.03或更高版本,则可以使用AppInstance.GetActivatedEventArgs方法获取IActivatedEventArgs,然后检查其Kind属性以确定应用程序是否从启动任务激活。
另一种选择是从启动任务中启动一个不同的.EXE文件。
这些API来自Windows.ApplicationModel.dllWindows.dll程序集,您无法将其添加到WPF应用程序
当然可以。请确保您已经安装了the latest 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();

相关问题