现在我在写一个程序,实现点击然后调用外部写好的一个exe程序。 程序是调用了,但是这个程序首先是一个登陆窗口。调用的时候报错  ‘连接数据库失败,无效的用户名口令。’但是单独双击运行这个程序的时候是没有错的。不知道什么原因。

解决方案 »

  1.   

    winexec(pchar(程序名),sw_show)就可以了。
      

  2.   

    就是个exe文件,当然还有数据库配置文件之类的。双击就弹出用户名 密码 的登录框。我调用的时候提示登录数据库的用户名密码。。按里说不应该啊 。单独运行的时候是没有问题的啊。
      

  3.   

    单独运行出现登录对话框与别的程序调用运行不出现对话登录框,这种方法可以在程序oncreate中检查参数,或者读取内存中映射信息。
    如果是带参数运行,则检查参数,如果是采用内存映射,则检查内存映射信息,如果有,则不出现登录对话框,反之直接运行。最近我在做类似功能时,就采用内存映射的方法。
    例:在A程序中调用B程序,在A程序中将用户信息用内存映射的方法,在B程序中检查并读取,但如果B程序是独立运行,则B程序运行时就显示登录窗体,这样安排,是为了让B程序既可以被调用运行,也可以单独运行。
      

  4.   


    那运行此exe前,应该先进入它的子目录,再运行
    或者执行一个bat:
    d:
    cd d:\dir2
    other.exe
      

  5.   

    你的意思是先创建一个Bat内容是进入到这个调用的目录
      1. bat 
       cd d:\bin
    然后在应用程序里先调用这个Bat
        ShellExecute(handle,   'open ',   Pchar( 'c:\1.Bat '),   nil,   nil,SW_ShowNormal);
    然后在调用程序:
        shellExecute(handle,   'open ',   Pchar( 'd:\bin\myprocess.exe '),   nil,   nil,SW_ShowNormal);
    是这样么?
       
      

  6.   

    先创建一个Bat内容是进入到这个调用的目录
      1. bat 
      d: 
      cd d:\bin
      other.exe
    然后在应用程序里调用这个Bat
      ShellExecute(handle, 'open ', Pchar( 'c:\1.Bat '), nil, nil,SW_ShowNormal);
    不必调用程序了
      

  7.   

    非常感谢。貌似可以了。
    总结一下:我把调用的程序放在了D盘。bat文件也在D盘。都在D盘下。然后在程序里调用这个bat文件就可以正常登陆了。貌似bat 文件必须和调用的程序放在一个目录底下才能找到。没想到一个调用程序,还和目录有关,真是很感谢sz_haitao。至少肯定没这么快就能解决。
    明天在正式环境试了在给分哦。
      

  8.   

    貌似bat 文件必须和调用的程序放在一个目录底下才能找到
    ——如果bat里有d:,就先切换盘符了没想到一个调用程序,还和目录有关
    ——这可能与被调程序需要访问它的工作目录有关