این راهنما برای اجرای دورهای برنامه پیامک بهصورت Windows Service با استفاده از WinSW تهیه شده است، بدون استفاده از Task Scheduler.
D:\SMSSender\iMaster.ERP.SmsSender.Console.exe
D:\SmsService\SmsRunnerService.exe
D:\SmsService\SmsRunnerService.xml
D:\SmsService\run-loop.ps1
D:\SmsService\runner.log
D:\SmsService\logs
SmsRunnerService.exe
SmsRunnerService.xml
$exePath در فایل run-loop.ps1 اصلاح شود.$processName نیز باید اصلاح شود.درایو و پوشههای زیر باید وجود داشته باشند:
D:\SMSSender\
D:\SmsService\
D:\SmsService\logs\
D:\SMSSender\iMaster.ERP.SmsSender.Console.exe
D:\SmsService\SmsRunnerService.exe
run-loop.ps1 را در مسیر زیر بسازید:D:\SmsService\run-loop.ps1
SmsRunnerService.xml را در مسیر زیر بسازید:D:\SmsService\SmsRunnerService.xml
CMD یا PowerShell را با Run as Administrator باز کنید و دستورهای زیر را اجرا کنید.
دستورهای نصب سرویس
cd /d D:\SmsService
SmsRunnerService.exe install
SmsRunnerService.exe start
برای ریاستارت خودکار سرویس در صورت خطا:
دستورهای Recovery
sc failure SmsRunnerService reset= 86400 actions= restart/5000/restart/10000/restart/60000
sc config SmsRunnerService start= auto
run-loop.ps1$exePath = "D:\SMSSender\iMaster.ERP.SmsSender.Console.exe"
$processName = "iMaster.ERP.SmsSender.Console"
$intervalSeconds = 60
$logFile = "D:\SmsService\runner.log"
while ($true) {
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
try {
$alreadyRunning = Get-Process -Name $processName -ErrorAction SilentlyContinue
if (-not $alreadyRunning) {
Add-Content $logFile "[$timestamp] Starting $exePath"
$process = Start-Process -FilePath $exePath -PassThru
$process.WaitForExit()
$exitCode = $process.ExitCode
Add-Content $logFile "[$timestamp] Finished with exit code $exitCode"
}
else {
Add-Content $logFile "[$timestamp] Process already running. Skipped."
}
}
catch {
Add-Content $logFile "[$timestamp] ERROR: $($_.Exception.Message)"
}
Start-Sleep -Seconds $intervalSeconds
} |
SmsRunnerService.xml<service>
<id>SmsRunnerService</id>
<name>SMS Runner Service</name>
<description>Runs iMaster.ERP.SmsSender.Console.exe every 1 minute</description>
<executable>C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe</executable>
<arguments>-NoProfile -ExecutionPolicy Bypass -File "D:\SmsService\run-loop.ps1"</arguments>
<logpath>D:\SmsService\logs</logpath>
<log mode="roll-by-size">
<sizeThreshold>10240</sizeThreshold>
<keepFiles>8</keepFiles>
</log>
<startmode>Automatic</startmode>
<onfailure action="restart" delay="10 sec"/>
<onfailure action="restart" delay="30 sec"/>
<onfailure action="restart" delay="1 min"/>
</service> |
پنجره سرویسها را باز کنید:
services.msc
سرویس زیر باید وجود داشته باشد و در حالت Running باشد:
SMS Runner Service
دستور بررسی وضعیت سرویس
sc query SmsRunnerService
اگر سرویس فعال باشد، وضعیت آن باید شبیه RUNNING باشد.
فایل زیر را بررسی کنید:
D:\SmsService\runner.log
اگر سرویس درست کار کند، ورودهای جدید در لاگ ثبت میشود.
پوشه زیر را بررسی کنید:
D:\SmsService\logs
زمان اجرای مجدد برنامه از این متغیر در فایل run-loop.ps1 کنترل میشود:
$intervalSeconds = 60
اجرای هر 1 دقیقه:
$intervalSeconds = 60
اجرای هر 2 دقیقه:
$intervalSeconds = 120
اجرای هر 5 دقیقه:
$intervalSeconds = 300
بعد از تغییر این مقدار، سرویس را ریاستارت کنید:
دستور ریاستارت سرویس
D:\SmsService\SmsRunnerService.exe restart
نمایش دستورهای Start / Stop / Restart / Uninstall
D:\SmsService\SmsRunnerService.exe start
D:\SmsService\SmsRunnerService.exe stop
D:\SmsService\SmsRunnerService.exe restart
D:\SmsService\SmsRunnerService.exe uninstall
$exePath$processNamerunner.log ساخته نشد، دسترسی نوشتن روی مسیر D:\SmsService بررسی شود.D:\SmsService\logs بررسی شوند.در این ساختار: