在Delphi开发的服务中调用指定应用程序
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;
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;
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;
http://fxh7622.blog.51cto.com/63841/529033
在Delphi开发的服务中调用指定应用程序的更多相关文章
- 基于gin的golang web开发:服务间调用
微服务开发中服务间调用的主流方式有两种HTTP.RPC,HTTP相对来说比较简单.本文将使用 Resty 包来实现基于HTTP的微服务调用. Resty简介 Resty 是一个简单的HTTP和REST ...
- VS开发】C中调用C++文件中定义的function函数
[VS开发]C中调用C++文件中定义的function函数 标签(空格分隔): [VS开发] 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 精要一揽 C调用 ...
- 【VS开发】MFC中调用C函数模块的解决方案
[VS开发]MFC中调用C函数模块的解决方案 标签(空格分隔): [VS开发] 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:最近调试基于MFC的程序 ...
- [转]VC中调用外部exe程序方式
本文转自:http://blog.sina.com.cn/s/blog_486285690100ljwu.html 目前知道三种方式:WinExec,ShellExecute ,CreateProce ...
- js网页中调用本地应用程序
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta http-equiv="Con ...
- C语言中调用运行python程序
C语言中调用运行python程序: Python代码如下: 创建test.py. #!/usr/bin/python3 #test.py import sys x = ]) print x*x 注意: ...
- feign服务中调用,传递token
默认spring-boot 微服务中 用feign来做服务间调用,是不会携带token传递的.为了能让服务间调用的时候带上token,需要进行配置,增强resTemplate 1.先实现请求拦截器 ...
- 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 ...
- [转]vc中调用其他应用程序的方法(函数) winexec,shellexecute ,createprocess
三个SDK函数: WinExec,ShellExecute ,CreateProcess可以实现调用其他程序的要求,其中以WinExec最为简单,ShellExecute比WinExec灵活一些,Cr ...
随机推荐
- URAL DP第一发
列表: URAL 1225 Flags URAL 1009 K-based Numbers URAL 1119 Metro URAL 1146 Maximum Sum URAL 1203 Scient ...
- 「OC」内存管理
一.基本原理 (一)为什么要进行内存管理. 由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当app所占用的内存较多时,系统就会发出内存警告,这时需要回收一些不需要再继续使用的内存空 ...
- OpenSSL命令---rsa
用途: Rsa命令用于处理RSA密钥.格式转换和打印信息.其实其用法和dsa的差不多. 用法: openssl rsa [-inform PEM|NET|DER] [-outform PEM|NET| ...
- 打包jar类库与使用jar类库
翻译人员: 铁锚 翻译时间: 2013年11月17日 原文链接: Build a Java library by using jar file 代码复用是软件开发中很重要的一个原则.将常用的函数构建 ...
- C#学习日记之数据库连接
一.webconfig设置和参数解释 在C#中新建一个网站时,webconfig文件中会有一个默认的数据库连接语句,如下 <connectionStrings> <add name= ...
- python2.7_1.3_获取远程设备的IP地址
代码如下: # -*- coding: utf-8 -*- import socket def get_remote_machine_info(): remote_host = 'www.python ...
- python成长之路13
一:SqlAlchemy ORM ORM:Object Relational Mapping 对象关系映射是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换 SQLAlchemy是 ...
- 使用python操作RabbitMQ,Redis,Memcache,SQLAlchemy 其一
一.概念 1.Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态 ...
- Linux的起源、特点和版本号
前言 最近上陈渝老师的<高级操作系统>,需要在ucore实验平台上完成一个麻雀虽小五脏俱全的OS,本着看过一小半<30天自制操作系统>的自信,以为这不过是小case,怎料被虐得 ...
- python测试框架--nose
最近再浏览Python自动化测试框架,之前接触过unittest,看了篇文章,发现nose貌似更牛逼一些,于是安装试了试,分享一下心得. nose 项目是于 2005 年发布的,也就是 p ...