高分悬赏!在多层结构中,如何用shellexecute函数调用另一台微机上的程序(*.pdf)?急!急!急!(100分)

  • 主题发起人 主题发起人 braver
  • 开始时间 开始时间
B

braver

Unregistered / Unconfirmed
GUEST, unregistred user!
我用activeform技术写了一个基于IE的多层数据库应用系统,我想在程序中实现用api函数
调用与应用程序服务器在同一地方的另一微机上的应用程序,如*.pdf。可是,函数
shellexecute的路径参数只是本机上的路径,类似//admin/book/c/book/的网络路径
根本不接受!
请问各位大虾,如何用shellexecute调用其他机器上的程序?如果不能实现,请问
有没有其他的更好的途径?
 
网络路径可以接受,但在另一台微机上该目录必须是共享的,换句话说必须提供给你访问的权利,
否则是自然非法路径错了!
 
也可以用 DDE共享解决,具体使用办法看windows帮助,里面有详细用法。
 
shellexecute 也可以用网络路径吧?

或者你可以影射网络路径到一个驱动器号?

或者你可以直接 WinExec('xxx.exe //.../xxx.pgf',SW_NORMAL)
 
经我试验,ShellExecute可以接受 //机器名/目录名/程序 格式,但对方机器的目录必须共享。
 
这种方式安全吗?
考虑使用别的方法吧。
 
在服务器端做一个小程序比较安全。
 
利用这个方法,稍做修改。

// copy file to 网路芳邻
function XCopyFile(const ExistFile, NewFile: string;
const isOverWrite: Boolean; const password: string=''): Boolean;

function XCopyFile(const ExistFile, NewFile: string;
const isOverWrite: Boolean; const password: string=''): Boolean;
const
comm:string = 'Net use %s %s';
var
str: string;
bFlag: Boolean;
lpSInfo: TStartupInfo;
lpPInfo: TProcessInformation;
mCode:Cardinal;
begin
bFlag:= not isOverWrite;
if (Copy(NewFile,1,2) = '//') then
begin // 填入 StartupInfo
FillChar(lpSInfo, Sizeof(TStartupInfo), #0);
lpSInfo.cb := Sizeof(TStartupInfo);
lpSInfo.dwFlags := STARTF_USESHOWWINDOW;
lpSInfo.wShowWindow :=SW_Show;
str:= Format(comm,[ExtractFileDir(NewFile), password]);

if CreateProcess(nil, PChar(str),nil, nil, True, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, lpSInfo, lpPinfo) then
begin
WaitForSingleObject(lpPinfo.hProcess,3000);// 最多等叁秒(INFINITE)
if GetExitCodeProcess(lpPinfo.hProcess,mCode) then
TerminateProcess(lpPinfo.hProcess,mCode);

if CopyFile(PChar(ExistFile),PChar(NewFile),bFlag) then Result:= True
else Result:= False;
--------------------------------------------------------------------
->>>> Shelexecute. .....

end
else Result:= False;
end;
end;

 
影射它的盘.
 
多人接受答案了。
 
后退
顶部