Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
@echo off
rem runonce.bat - запуск указанного исполнимого файла с блокированием повторных запусков
copy /b /y %1 %1~.exe || goto error
start %1~.exe
exit /b
:error
cls
echo Повторный запуск программы запрещен
pause
C:\Windows\SYstem32\WindowsPOwerSHell\v1.0\powershell.exe -STA -NoLogo -NoProfile -WindowStyle Hidden -File "C:\.....\UniqueAppRunner.ps1" -AppID UNIQUENOTEPADParam(
[string]$AppID=$null
)
$appList = @{
'UNIQUENOTEPAD' = 'C:\WINDOWS\notepad.exe'
'UNIQUECALC' = 'C:\WINDOWS\System32\CALC.exe'
}
if ($AppID -eq $null) {
Write-Host 'Приложение не указано!' #Тут должен быть MessageBox, но лень
Exit
}
if ($appList[$appID.ToUpper()] -eq $null) {
Write-Host 'Запуск этого приложения через скрипт не предусмотрен!' #Тут должен быть MessageBox, но лень
Exit
}
if ($(Test-Path -Path $appList[$appId.ToUpper()] -ErrorAction SilentlyContinue ) -ne $true) {
Write-Host 'Исполняемый файл не обнаружен!' #Тут должен быть MessageBox, но лень
Exit
}
$appFlagFile = Join-Path -Path $env:APPDATA -ChildPath $($AppID + '.flg' )
If ( $(Test-Path -Path $appFlagFile ) -ne $false) {
Write-Host "Приложение $($AppID) уже запущено - присутствует флаг-файл $($appFlagFile)!" #Тут должен быть MessageBox, но лень
Exit
}
$(Get-Date ) | Out-File -FilePath $appFlagFile
Write-Host -ForegroundColor Green 'Запуск приложения'
Start-Process -FilePath $appList[$appID.ToUpper()] -Wait
Remove-Item -Path $appFlagFile -Force -Confirm:$false
Exit
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace forHabr
{
class Program
{
static void Main(string[] args)
{
Process[] allProcesses = Process.GetProcesses(); // берём все процессы.
List<string> processName = new List<string>();
foreach (Process p in allProcesses)
{
string name = p.ProcessName;
processName.Add(name);
}
string[] allProcessName = processName.ToArray<string>(); // имена всех процессов
string[] distinctProcessName = processName.Distinct<string>().ToArray<string>(); // "уникальные" процессы
for (; ; ) {
if (allProcessName.Count<string>() == distinctProcessName.Count<string>()) { }
else
{
Task task1 = Task.Run(() => { MessageBox.Show("Вы запустили копию процесса"); });
}
}
}
}
}
Запрет запуска копии стороннего приложения