当前位置:主页>销售管理软件> 列表

如何执行一个外部程序?有点难度,请高手们进 找进销存系统设计文档

销售管理软件版1楼: 调用一个外部程序,老是提示检测到非法程序
WinExec CreateProcess ShellExecute 都试了,还是不行
但手工给这个可执行程序建立一个快截方式,放到任何地方,都能正常运行
即使用chdir的方式,转到目录在执行也不同样提示
该程序应该有防止外部程序调用的设计,请大家想想办法,怎么才能调用它?

祝大家新年快乐!谢谢

2楼: 把程序也一起发上来侃侃啊 如销售管理软件下载

3楼: 既然快捷方式可以正常调用,你就用 ShellExecute 调用你创建的快捷方式,间接调用外部程序不就行了。

4楼: 还有,SHELLEXECUTE不行?没见过那种程序,呵呵。程序大吗?什么类型的?
不过不管如何,使用CreateProcess来调用都应该能可以。

5楼: 我想问题可能出在这里:你在调用外部程序时,没有指定被调用程序的启动目录。
ShellExecute(handle, ''Open'',''c:\rav\update.exe'',nil, ''c:\rav\'', sw_Show);

6楼: shine007言之有理

销售管理软件版7楼: 题外话,
注意!!! WinExec在Win98中不兼容,建议用ShellExecute !

8楼: to yzhshi: 用 CreateProcess 不行,调用其他应用程序都可以



to kaida: 直接调用 快截方式 也不行

to shine007: 早就试了,还是不行。就因为考虑到了,我还用 ChDir先指定了一次,还是不行

问题有点棘手,用以上各种方式调用其他应用程序都可以,但惟独调用这个程序不行。这个程序比较大,600M左右,光发个EXE上来也没用。

而且调用该程序的时候,总是提示,非法调用。其意思就是检查到外部程序在调用它,怎么才能避免呢?

那假设各位写一段程序,而该程序不准外部任何程序调用,该如何去实现?只要知道了原理,也就好办了。

9楼: 有点难度

10楼: 1、外部程序中 SetCurrentDir
2、http://www.delphibbs.com/keylife/iblog_show.asp?xid=16834

11楼: 那是有的程序最大化,最小化,时,你的参数有问题

12楼: 什么程序这么大 如金蝶财务软件迷你版

13楼: 估计是检测父进程是不是Exeplore了,这两天正好有空如果文件不大发到tseug@263.net

销售管理软件版14楼: to SiWeiLiuLang: 我是指完整程序,并没有说执行程序

我把执行的程序打了个包放在 http://www1.go168.com/noncgi/test.rar
1.25M,希望大家看看,帮我找到解决的办法,不甚感激!先谢谢了

15楼: to tseug:



看到你真高兴,希望能解决问题

16楼: 我下了你的test.rar
直接运行和用winexec或shellexecute调用都是一样的啊
Error:Cannot open game setting file [game.ini]
Please check if the directory is correct or re-install the game

17楼: 我用以下代码测试,也没问题:
uses shellapi;

function ExecuteFile(const FileName, Params, DefaultDir: string; ShowCmd: Integer): THandle;
var
zFileName, zParams, zDir: array[0..79] of Char;
begin
Result := ShellExecute(Application.MainForm.Handle, nil,
StrPCopy(zFileName, FileName), StrPCopy(zParams, Params),
StrPCopy(zDir, DefaultDir), ShowCmd);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ExecuteFile(''C:\test\test.exe'','''','''', SW_SHOWNORMAL);
end;

18楼: procedure TForm1.Button1Click(Sender: TObject);
begin
winexec(''C:\test\test.exe'',sw_show);
end;
就这样不行吗?我都是这样用的。

19楼: 上面的朋友,你们都是什么操作系统?
我是 win2000

即使我完整复制你们的代码,也是提示 检查到非法程序
我以为是注册表的问题,刚才把注册表所有和该程序有关的键值都删除完毕,但问题依旧

不过还是谢谢大家帮我测试,郁闷了

20楼: 我的邮箱 523105@qq.com

哪位朋友可以把编译好的程序发到我的邮箱,不会是我的delphi有问题吧

调用其他程序都是正确的,谢谢!

销售管理软件版21楼: 测试程序已发,请试试。

22楼: 在我的机器上,下面代码提示无法打开游戏配置文件,
Error:cannot open game setting file[game.ini]

procedure TForm3.Button1Click(Sender: TObject);
begin
WinExec(''D:\TEST\TEST.EXE'', SW_SHOW);
end; 如进销存系统设计文档

23楼: 学习一下

24楼: 在Delphi中直接运行,显示“检查到非常程序”,如果直接运行编译后的程序,则正常,我用的是winexec
程序加壳了,ASProtect 2.1x SKE -> Alexey Solodovnikov,外壳检测是否有调试程序

25楼: function WinExecAndWait32(FileName: string; Visibility: Boolean): integer;stdcall;
var
zAppName: array[0..512] of char; //存放应用程序名
StartupInfo: TStartupInfo;


ProcessInfo: TProcessInformation;
exitCode: Dword;
aVisibility: integer;
begin
try
StrPCopy(zAppName, FileName);
FillChar(StartupInfo, Sizeof(StartupInfo), #0);
//给StartupInfo结构体赋值
StartupInfo.cb := Sizeof(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
if Visibility then
aVisibility := 1
else
aVisibility := 0;

StartupInfo.wShowWindow := aVisibility;
//调用CreateProcess 创建进程,执行指定的可执行文件
if not CreateProcess(nil, zAppName, nil, nil, false
, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS
, nil, nil, StartupInfo, ProcessInfo) then
Result := -1
else
begin
//等待可执行文件退出
WaitforSingleObject(ProcessInfo.hProcess, INFINITE);
//得到进程终止状态码
GetExitCodeProcess(ProcessInfo.hProcess, exitCode);
result := Exitcode;
end;
end;

WinExecAndWait32(filename,True);//filename 文件路径名+.exe名

26楼: 感谢 一诺 释疑,是加壳的问题,谢谢,已解决