C# 如何使用powershell管理windwos 10中uwp应用程序的启动项?
我希望通过powershellC# 如何使用powershell管理windwos 10中uwp应用程序的启动项?,c#,powershell,uwp,startup,C#,Powershell,Uwp,Startup,我希望通过powershell启用/禁用uwp应用程序的启动项,但我尝试使用gcim win32\u startupcommand和获取项目HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run但找不到它们,shell:startup也为空,似乎uwp应用程序是不可见的,只能在任务管理器->启动中看到,所以我应该怎么做 我尝试使用Regshot来比较启用启动项之前和之后的差异,如下所示: 此外,我
启用/禁用uwp应用程序的启动项,但我尝试使用gcim win32\u startupcommand
和获取项目HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run
但找不到它们,shell:startup
也为空,似乎uwp应用程序是不可见的,只能在任务管理器->启动中看到,所以我应该怎么做
我尝试使用Regshot来比较启用启动项之前和之后的差异,如下所示:
此外,我发现在启动UWP或Task Manager之前,这些注册表项并不存在,因此最终我认为这可能是一个非常复杂的解决方案,我放弃了这样做。以下是skype应用程序启动信息在注册表中的位置示例。注册表项名称似乎不标准;也许你可以从清单上或者其他什么地方得到钥匙的名字。Uwp应用程序给管理员带来不便。即使系统内部自动运行也不会检测到这些
$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\u kzf8qxf38zg5c\SkypeStartup\State=1(dword)(从procmon类别写入)
Windows终端:
HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.WindowsTerminal\u 8wekyb3d8bbwe\StartTerminalOnLoginTask\State=1
iTunes有两个启动任务:
HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\AppleInc.iTunes\u nzyj5cx40ttqa\ApplemobiledDeviceProcess\State
HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\AppleInc.iTunes\u nzyj5cx40ttqa\iTunesHelper\State
也许是这个
[Windows.ApplicationModel.StartupTask]
如果有人告诉我如何使用C#,我可以将其转换为Powershell。在实现对[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
}
有关可能的状态值的更多信息,请参阅:
有关如何将这些任务内置到UWP应用程序中的示例,请参阅:
享受。谢谢你的回复,我通过比较得到了类似的结果,但我最终觉得这个解决方案太复杂了,因为我发现UWP应用安装后,如果应用或任务管理器没有启动,这些注册表项甚至不存在,我放弃了,再次感谢你的回复,这个脚本非常有用。它确实可以切换启动项的状态。唯一的问题是,在我安装应用程序后,如果我没有启动应用程序或打开任务管理器,注册表项将不存在,脚本将无法工作。