检查应用程序是否已在运行或重新启动

时间:2015-07-22 20:01:26

标签: javascript sql vb.net powershell batch-file

检查应用程序是否已在运行或重新启动

如果应用程序服务在SQL中运行,我们可以检查并重新启动。也可以使用SQL JOB完成此检查。该应用程序是用旧的VB编写的,并且已经过时了。它需要始终处于活动状态。所以我们在它崩溃时运行它。

有没有办法检查exe(即Notepad.exe)是否正在运行,如果没有则重新启动。在SQL 2005 \ windows脚本中或我们做另一个应用程序(VB)来检查。

运行SQL脚本检查notepad.exe是否正在运行并将结果记录在表中会有什么好处。

4 个答案:

答案 0 :(得分:1)

此批处理代码演示任务列表的用法,以确定应用程序是否正在运行。

@echo off
for /F "skip=2" %%I in ('%SystemRoot%\System32\tasklist.exe /FI "IMAGENAME eq Notepad.exe" 2^>nul') do (
    if /I "%%I" == "Notepad.exe" goto AppRunning
)
echo Notepad is not running.
goto :EOF

:AppRunning
echo Notepad is running.

有关使用过的命令的详细信息,请打开命令提示符窗口,然后按照以下命令运行,以获取窗口中每个命令输出的帮助以供阅读。

  • for /?
  • goto /?
  • if /?
  • tasklist /?

命令任务列表会生成漂亮的打印输出。如果可执行文件的文件名不是典型的8.3格式,但是更长,则列表中可执行文件的文件名将被截断。

例如,任务列表的输出在德语版Windows XP上

Abbildname                  PID Sitzungsname      Sitz.-Nr. Speichernutzung
========================= ===== ================ ========== ===============
NotePad012345678901234567  3088 Console                   0         1.984 K

使用命令行检查NotePad012345678901234567890123456.exe

%SystemRoot%\System32\tasklist.exe /FI "IMAGENAME eq Notepad*"

注意:通配符*用于图像名称过滤器规范。

可执行文件的长文件名被截断为25个字符。

以下批处理代码通过检查任何正在运行的应用程序的前7个字符是否为Notepad来解决截断问题。

@echo off
setlocal EnableDelayedExpansion
for /F "skip=2" %%I in ('%SystemRoot%\System32\tasklist.exe /FI "IMAGENAME eq Notepad*" 2^>nul') do (
    set "ImageName=%%I"
    if /I "!ImageName:~0,7!" == "Notepad" goto AppRunning
)
echo Sorry, but there is no Notepad* application running.
endlocal
goto :EOF

:AppRunning
echo There is a Notepad* application running.
endlocal

当然可以使用第一批代码,只有前25个字符的可执行文件名。

注意:两个批处理代码中使用的命令 仅将第三行开头的字符串分配给第一个空格或制表符到循环变量I,这对于了解情况很重要可执行文件包含一个或多个空格字符。

答案 1 :(得分:0)

您可以使用Windows计划任务执行powershell脚本,其中包含以下代码。

保存到文件AutoStart-MyApplicationName.ps1

if (!(Get-Process | Where-Object {$_.Name -eq "<Your exe Process name>"})) {Start-Process <path to your exe>}

将您的Windows计划任务设置为以最适合您需要的间隔运行。你的任务的“动作”步骤应该是powershell,参数为“-NoProfile -NoLogo -File c:\ AutoStart-MyApplicationName.ps1”

答案 2 :(得分:0)

如果exe正在运行,您可以使用#include "stdafx.h" #include <opencv2/core.hpp> #include <iostream> using namespace cv; using namespace std; static void saveCameraParams(Mat c, Mat d); int main(int argc, char** argv) { Mat cameraMatrix = Mat(3, 3, CV_64F, cvScalar(0.)); Mat distCoeffs = Mat(5, 1, CV_64F, cvScalar(0.)); saveCameraParams(cameraMatrix, distCoeffs); } static void saveCameraParams(Mat cameraMatrix, Mat distCoeffs) { Size imageSize; imageSize.width = 3; imageSize.width = 4; FileStorage fs("test_out.xml", FileStorage::WRITE); fs << "camera_matrix" << cameraMatrix; fs << "distCoeffs" << distCoeffs; fs << "image_width" << imageSize.width; fs << "image_height" << imageSize.height; fs.release(); } DOS命令,如下所示

TASKLIST

使用@UnknownOctopus的注释,您可以使用tasklist /FI "IMAGENAME eq notepad.exe" /FI "STATUS eq running" 查看errorlevel命令是否已返回。你可以做类似下面的事情来实现你的目标(示例代码......在你的情况下你可以运行tasklist如果它没有运行)

notepad.exe

答案 3 :(得分:0)

您可以使用计划根据需要运行的简单PowerShell脚本:

$process = Get-Process -Name chrome

if ($process -eq $null)
{
    Start-Process -FilePath 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'
}

用您的进程名称/文件路径替换chrome部分