原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://fxh7622.blog.51cto.com/63841/529033
在很多时候,我们需要使用服务启动指定的应用程序来做到隐蔽启动程序的目的。
但是当我们直接使用Winexec来运行的时候,你会发现系统提示出错。以下的代码就是如何在Delphi编写的服务中启动指定的应用程序。 
function RunProcess(const ProcessName: String): Boolean;
Var
  siStartupInfo:STARTUPINFO;
  saProcess,saThread:SECURITY_ATTRIBUTES;
  piProcInfo:PROCESS_INFORMATION;
  Hd:Cardinal;
  ProcessHd:THandle;
  Hds:THandle;
  Str:String;
begin
  Result:=False;
  if not ExistFileName(ProcessName) then
  begin
    Exit;
  end;
  ProcessHd:=GetProcessHandleAsName( 'Explorer ');
  if ProcessHd = 0 then Exit;
  if OpenProcessToken(ProcessHd,TOKEN_ALL_ACCESS,Hds)   then
  begin
    if DuplicateTokenEx(Hds,TOKEN_ALL_ACCESS,nil,SecurityIdentification,TokenPrimary,Hd)   then
    begin
      ZeroMemory(@siStartupInfo,sizeof(siStartupInfo));
      siStartupInfo.cb:=sizeof(siStartupInfo);
      saProcess.nLength:=sizeof(saProcess);
      saProcess.lpSecurityDescriptor:=nil;
      saProcess.bInheritHandle:=false;
      saThread.nLength:=sizeof(saThread);
      saThread.lpSecurityDescriptor:=nil;
      saThread.bInheritHandle:=false;
      Result:=CreateProcessAsUser(Hd,nil,PChar(ProcessName),nil,nil,false, CREATE_DEFAULT_ERROR_MODE,nil,nil,siStartupInfo,piProcInfo);
    end;
  end;
end;
 
参数:ProcessName是你需要启动的应用程序的绝对路径。
一般希望启动的时候被启动的应用程序没有运行。这时你就需要首先轮询判断此应用程序是否正在运行,以下代码就是判断你指定的应用程序是否在运行中。 
function IsExeRun(const ExeName: String): Boolean;
var
  ok: Bool;
  ProcessID: Integer;
  ProcessFullPath: String;
  pProcess: PProcessInfo;
  ProcessListHandle: THandle;
  ProcessStruct: TProcessEntry32;
begin
  //检测用户端是否正在运行
  ProcessListHandle :=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  ProcessStruct.dwSize := Sizeof(ProcessStruct);
  ok := Process32First(ProcessListHandle, ProcessStruct);
  while Integer(ok) <> 0 do
  begin
    ProcessID:=ProcessStruct.th32ProcessID;
        if UpperCase(Trim(ProcessStruct.szExeFile)) = UpperCase(Trim(ExeName)) then
    begin
      Result:=True;
      Exit;
    end;
    ok := Process32Next(ProcessListHandle, ProcessStruct);
  end;
end;
 
其中参数 const ExeName: String 是你需要判断的应用程序在任务管理器中的名称。
如果你希望了解更多信息,欢迎登录“掰掰开发”论坛

http://fxh7622.blog.51cto.com/63841/529033

在Delphi开发的服务中调用指定应用程序的更多相关文章

  1. 基于gin的golang web开发:服务间调用

    微服务开发中服务间调用的主流方式有两种HTTP.RPC,HTTP相对来说比较简单.本文将使用 Resty 包来实现基于HTTP的微服务调用. Resty简介 Resty 是一个简单的HTTP和REST ...

  2. VS开发】C中调用C++文件中定义的function函数

    [VS开发]C中调用C++文件中定义的function函数 标签(空格分隔): [VS开发] 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 精要一揽 C调用 ...

  3. 【VS开发】MFC中调用C函数模块的解决方案

    [VS开发]MFC中调用C函数模块的解决方案 标签(空格分隔): [VS开发] 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:最近调试基于MFC的程序 ...

  4. [转]VC中调用外部exe程序方式

    本文转自:http://blog.sina.com.cn/s/blog_486285690100ljwu.html 目前知道三种方式:WinExec,ShellExecute ,CreateProce ...

  5. js网页中调用本地应用程序

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta http-equiv="Con ...

  6. C语言中调用运行python程序

    C语言中调用运行python程序: Python代码如下: 创建test.py. #!/usr/bin/python3 #test.py import sys x = ]) print x*x 注意: ...

  7. feign服务中调用,传递token

    默认spring-boot 微服务中 用feign来做服务间调用,是不会携带token传递的.为了能让服务间调用的时候带上token,需要进行配置,增强resTemplate   1.先实现请求拦截器 ...

  8. Generate PDF in Sourcing through concurrent request,在EBS java并发中调用指定am的方法

    package oracle.apps.pon.printing.cp; import java.io.InputStream; import java.io.FileOutputStream; im ...

  9. [转]vc中调用其他应用程序的方法(函数) winexec,shellexecute ,createprocess

    三个SDK函数: WinExec,ShellExecute ,CreateProcess可以实现调用其他程序的要求,其中以WinExec最为简单,ShellExecute比WinExec灵活一些,Cr ...

随机推荐

  1. Group By 多个分组集小结 --GROUPING SETS,GROUP BY CUBE,GROUP BY ROLLUP,GROUPING(),GROUPING_ID()

    T-SQL 多个分组集共有三种 GROUPING SETS, CUBE, 以及ROLLUP, 其中 CUBE和ROLLUP可以当做是GROUPING SETS的简写版 示例数据库下载: http:// ...

  2. 使用JS进行pc端、手机端判断

     <script type="text/javascript">            (function(){                var ua = nav ...

  3. HYSBZ 2301

    /*** 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数 **/ #include <iost ...

  4. Ants (POJ 1852)

    题目描述: Description An army of ants walk on a horizontal pole of length l cm, each with a constant spe ...

  5. IE11中[if lt IE 9]兼容性问题

    IE11不支持<!--[if lt IE 9]>  <![endif]--> ,蛋疼的IE!!!

  6. victim是什么意思_victim在线翻译_英语_读音_用法_例句_海词词典

    victim是什么意思_victim在线翻译_英语_读音_用法_例句_海词词典 victim

  7. QT中QWidget类简介

    一.详细描述 QWidget类是所有用户界面对象的基类.通俗的来讲,Qt基本上所有的UI类都是由QWidget继承出来的,而QWidget继承于QObject,  大家可以查阅Qt source 即可 ...

  8. MFC中SDI程序创建流程的回顾

    SDI程序创建流程的回顾 从CWinApp.InitialInstance()开始, 1.首先应用程序对象创建文档模板; CSingleDocTemplate* pDocTemplate; pDocT ...

  9. android 项目中使用到的网络请求框架以及怎样配置好接口URL

    我们在做项目中一定少不了网络请求,如今非常多公司的网络请求这块好多都是使用一些比較好的开源框架,我项目中使用的是volley,如今讲讲一些volley主要的使用,假设想要具体的了解就要去看它的源代码了 ...

  10. java中将list、map对象写入文件

    链接地址:http://blog.sina.com.cn/s/blog_4a4f9fb50101p6jv.html     推荐:凤爪女瓜子男怪象该谁反思伦敦房价为什么持续暴涨 × wvqusrtg个 ...