问题描述
我希望通过Powershell enable/disable
来启动uwp应用程序的启动项,但是我尝试使用gcim win32_startupcommand
和Get-Item HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run
却找不到它们,shell:startup
也是为空,看来uwp应用程序是不可见的,只能在任务管理器->启动中看到,所以我该怎么办?
我尝试使用Regshot比较启用启动项之前和之后的区别,如下所示:
此外,我发现在启动UWP或任务管理器之前这些注册表项并不存在,因此最后我认为这可能是一个非常复杂的解决方案,我放弃了。
解决方法
在实现对 [Windows.ApplicationModel.StartupTask] :: RequestEnableSync()和 :: Disable()方法的本机调用之前,这是一个潜在的解决方法。
在此示例中,我切换了Skype桌面扩展启动任务的状态:
$app = (Get-AppxPackage | Where-Object -Property Name -EQ -Value Microsoft.SkypeApp)
$pkgName = $app.PackageFamilyName
$startupTask = ($app | Get-AppxPackageManifest).Package.Applications.Application.Extensions.Extension | Where-Object -Property Category -Eq -Value windows.startupTask
$taskId = $startupTask.StartupTask.TaskId
$state = (Get-ItemProperty -Path "HKCU:Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\$pkgName\$taskId" -Name State).State
$regKey = "HKCU:Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\$pkgName\$taskId"
if ($state -in 0,1,3) {
Set-ItemProperty -Path $regKey -Name UserEnabledStartupOnce -Value 1
Set-ItemProperty -Path $regKey -Name State -Value 2
} else {
$lastDisabled = [int](New-TimeSpan -Start (Get-Date '1970-01-01 00:00:00 GMT') -End (Get-Date)).TotalSeconds
Set-ItemProperty -Path $regKey -Name LastDisabledTime -Value $lastDisabled
Set-ItemProperty -Path $regKey -Name State -Value 1
}
有关可能的状态值的更多信息,请参见:https://docs.microsoft.com/en-us/uwp/api/windows.applicationmodel.startuptaskstate?view=winrt-19041
有关如何在UWP应用程序中内置这些任务的示例,请参见:https://windowsadmins.com/configure-your-app-to-start-at-log-in/
享受。
,这是一个Skype应用程序启动信息在注册表中的示例。注册表项名称似乎是非标准的;也许您可以从清单或其他内容中获取密钥的名称。 Uwp应用程序给管理员带来了不便。甚至Sysinternals Autoruns也无法检测到这些。
$a = Get-AppxPackage *skype* | Get-AppPackageManifest
$a.package.Applications.Application.Extensions.extension.startuptask.taskid
SkypeStartup
$a = get-appxpackage *windowsterminal* | Get-AppxPackageManifest
$a.package.Applications.Application.Extensions.extension.startuptask.taskid
StartTerminalOnLoginTask
# list all the app startups
$starts = get-appxpackage -pv app | get-appxpackagemanifest | % {
if ($_.package.Applications.Application.Extensions.extension.startuptask.taskid) {
[pscustomobject] @{ PackageFamilyName = $app.PackageFamilyName
TaskID = $_.package.Applications.Application.Extensions.extension.startuptask.taskid} } }
$starts
PackageFamilyName TaskID
----------------- ------
Microsoft.SkypeApp_kzf8qxf38zg5c SkypeStartup
AppleInc.iTunes_nzyj5cx40ttqa {AppleMobileDeviceProcess,iTunesHelper}
Microsoft.WindowsTerminal_8wekyb3d8bbwe StartTerminalOnLoginTask
# so maybe to disable startups by setting them to 1:
$starts | % {
$fname = $_.PackageFamilyName
$_.taskid | % {
$taskid = $_
Set-ItemProperty "HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\$fname\$taskid" State 1 -whatif
}
}
What if: Performing the operation "Set Property" on target "Item: HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.SkypeApp_kzf8qxf38zg5c\SkypeStartup Property: State".
What if: Performing the operation "Set Property" on target "Item: HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\AppleInc.iTunes_nzyj5cx40ttqa\AppleMobileDeviceProcess Property: State".
What if: Performing the operation "Set Property" on target "Item: HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\AppleInc.iTunes_nzyj5cx40ttqa\iTunesHelper Property: State".
What if: Performing the operation "Set Property" on target "Item: HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.WindowsTerminal_8wekyb3d8bbwe\StartTerminalOnLoginTask Property: State".
2启用,1禁用。在“设置”应用中搜索“启动应用”。
Skype:
HKCU \ Software \ Classes \ Local Settings \ Software \ Microsoft \ Windows \ CurrentVersion \ AppModel \ SystemAppData \ Microsoft.SkypeApp_kzf8qxf38zg5c \ SkypeStartup \ State = 1(dword)(写入procmon类别)
Windows终端:
HKCU \ Software \ Classes \ Local Settings \ Software \ Microsoft \ Windows \ CurrentVersion \ AppModel \ SystemAppData \ Microsoft.WindowsTerminal_8wekyb3d8bbwe \ StartTerminalOnLoginTask \ State = 1
iTunes有2个启动任务:
HKCU \ Software \ Classes \ Local Settings \ Software \ Microsoft \ Windows \ CurrentVersion \ AppModel \ SystemAppData \ AppleInc.iTunes_nzyj5cx40ttqa \ AppleMobileDeviceProcess \ State
HKCU \ Software \ Classes \ Local Settings \ Software \ Microsoft \ Windows \ CurrentVersion \ AppModel \ SystemAppData \ AppleInc.iTunes_nzyj5cx40ttqa \ iTunesHelper \ State
https://docs.microsoft.com/en-us/uwp/api/windows.applicationmodel.startuptask?view=winrt-19041
[Windows.ApplicationModel.StartupTask]
如果有人告诉我如何使用C#进行操作,则可以将其翻译为Powershell。