[英]How can I stop a user from logging out or locking a workstation using Powershell based on the response to a MessageBox?
[英]Stop user from opening an already program using PowerShell
我想阻止用户使用 PowerShell 在 Windows 中运行另一个已经运行的程序/服务实例。
例如:我打开了记事本,然后在几分钟的时间内我想禁用打开记事本的选项,因为它已经在运行。
到目前为止,我可以检测程序是否打开,如果没有,我可以为用户打开它(附上代码)。
$processName = Get-Process notepad -ErrorAction SilentlyContinue
if ( $processName ) {
Write-Host 'Process is already running!'
#stop another instance of notepad to be opened, since it is already running
}
else {
$userChoice = Read-Host 'Process is not running, should I start it? (Y/N) '
if ($userChoice -eq 'Y') {
Start-Process notepad
}
else {
Write-Host 'No Problem!'
}
}
但是,如何禁用用户打开另一个相同实例的选项?
任何相同的线索都会有所帮助。
由于 Windows 没有阻止启动多个可执行文件副本的功能,因此您有两个选择:
第一个选项有其警告。 如果启动额外的副本,平均需要一半的轮询间隔来检测这些副本。 更重要的是,哪些进程将被终止? 最年长的? 最小的? 其他一些标准?
只需启动应用程序本身即可轻松绕过第二个。
唯一真正的解决方案是在应用程序本身中实现单实例功能。 游戏经常这样做。 对于商业软件,请注意用户会讨厌您,如果运行多个实例的原因只有一个。 是的,特别是如果那个用例是荒谬的。
作为基于互斥锁的启动器的示例,请考虑以下函数
function Test-Mutex {
$mtx = new-object System.Threading.Mutex($false, "SingleInstanceAppLauncher")
if(-not $mtx.WaitOne(0, $false)) {
write-host "Mutex already acquired, will not launch second instance!"
read-host "Any key"
return
}
write-host "Running instance #1"
read-host "Any key"
# Do stuff
}
就像解决方案 2 的警告一样,任何用户都可以通过执行do suff
部分来绕过限制。 请记住,包装防止启动包装的多个实例,而不是对做的东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.