【问题标题】:CreateProcess from within Screen Saver屏幕保护程序中的 CreateProcess
【发布时间】:2020-11-29 15:19:32
【问题描述】:

我需要从我的屏幕保护程序中启动“explorer.exe”,但无论我尝试什么,当我的屏幕保护程序关闭时它都不会保持打开状态。

CreateProcess(nil, 'explorer.exe /select,"' + fileName + '"', nil, nil, false, 0, nil, '', StartupInfo, ProcessInfo)

我尝试了多种标志和参数的组合,但没有运气:) Explorer 会短暂启动,然后以我的屏幕保护应用程序关闭...

here 中有一个解决方案,但它需要 windows 服务,这对于一个简单的屏幕保护程序来说太多了......

有人知道吗?

谢谢!

【问题讨论】:

  • 当用户登录或未登录时,您的屏幕保护程序是否正在运行?
  • 已登录,未激活锁
  • 父进程退出时子进程不会退出。您是否尝试过启动其他应用程序而不是 explorer.exe 以查看它是否重现了相同的问题?
  • 是的,同样的行为......

标签: windows winapi createprocess screensaver windows-screensaver


【解决方案1】:

回答我自己, 我使用当前登录用户创建了一个 Windows 任务,以便在 ss 关闭后 2 秒内启动。而且效果很好。

这里是创建任务的命令:

powershell -command "& {Register-ScheduledTask -Action $(New-ScheduledTaskAction -Execute "explorer.exe" -Argument '/select,"d:/test/txt" ') -Trigger $(New-ScheduledTaskTrigger -Once -At (Get-Date).AddSeconds(2)) -TaskName "MyTask" -TaskPath "MyTasks" -Principal $(New-ScheduledTaskPrincipal -UserId $(Get-CimInstance –ClassName Win32_ComputerSystem | Select-Object -expand UserName))}"

并且不要忘记在创建新任务之前删除任务 - 否则创建失败

powershell -command "& {Unregister-ScheduledTask -TaskName "MyTask" -Confirm:$false}"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 2014-05-10
    • 2015-08-29
    相关资源
    最近更新 更多