检查应用程序是否已在运行或重新启动
如果应用程序服务在SQL中运行,我们可以检查并重新启动。也可以使用SQL JOB完成此检查。该应用程序是用旧的VB编写的,并且已经过时了。它需要始终处于活动状态。所以我们在它崩溃时运行它。
有没有办法检查exe(即Notepad.exe)是否正在运行,如果没有则重新启动。在SQL 2005 \ windows脚本中或我们做另一个应用程序(VB)来检查。
运行SQL脚本检查notepad.exe是否正在运行并将结果记录在表中会有什么好处。
答案 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部分