我写了一个"华夏2.exe"
路径:  "d:\kh\game\华夏2.exe"
这个"华夏2.exe"实际是为了去执行 "f:\华夏2\华夏2.exe",因为特殊原因,必须调用执行不能直接执行。
而现在出现问题了。。
执行"d:\kh\game\华夏2.exe",结果程序默认路径为"d:\kh\game\"
"f:\华夏2\华夏2.exe"执行的时候自动生成出来的  "*.ini","data"文件夹 都释放到了"d:\kh\game\",
这样导致游戏无法开启,提示 "缺少 *.ini文件"  '"*.ini","data"文件夹 应该释放到 "f:\华夏2\"中才能正常启动.
或者提示 "....."  反正就是错误提示。
我用过  wscript.shell       .run "cmd /c "d:\kh\game\华夏2.exe""
也用过   winexec "d:\kh\game\华夏2.exe",1
也用过   shell()
都不行,好象是缺少什么关键语句。
传说中的高手在哪?救命.

解决方案 »

  1.   


          Option Explicit      Private Type PROCESS_INFORMATION
             hProcess As Long
             hThread As Long
             dwProcessId As Long
             dwThreadId As Long
          End Type      Private Type STARTUPINFO
             cb As Long
             lpReserved As String
             lpDesktop As String
             lpTitle As String
             dwX As Long
             dwY As Long
             dwXSize As Long
             dwYSize As Long
             dwXCountChars As Long
             dwYCountChars As Long
             dwFillAttribute As Long
             dwFlags As Long
             wShowWindow As Integer
             cbReserved2 As Integer
             lpReserved2 As Long
             hStdInput As Long
             hStdOutput As Long
             hStdError As Long
          End Type      Private Declare Function CreateProcess Lib "kernel32" _
             Alias "CreateProcessA" _
             (ByVal lpApplicationName As String, _
             ByVal lpCommandLine As String, _
             lpProcessAttributes As Any, _
             lpThreadAttributes As Any, _
             ByVal bInheritHandles As Long, _
             ByVal dwCreationFlags As Long, _
             lpEnvironment As Any, _
             ByVal lpCurrentDriectory As String, _
             lpStartupInfo As STARTUPINFO, _
             lpProcessInformation As PROCESS_INFORMATION) As Long      Private Declare Function OpenProcess Lib "kernel32.dll" _
             (ByVal dwAccess As Long, _
             ByVal fInherit As Integer, _
             ByVal hObject As Long) As Long      Private Declare Function TerminateProcess Lib "kernel32" _
             (ByVal hProcess As Long, _
             ByVal uExitCode As Long) As Long      Private Declare Function CloseHandle Lib "kernel32" _
             (ByVal hObject As Long) As Long      Const SYNCHRONIZE = 1048576
          Const NORMAL_PRIORITY_CLASS = &H20&      Private Sub Form_Click()
             Dim pInfo As PROCESS_INFORMATION
             Dim sInfo As STARTUPINFO
             Dim sNull As String
             Dim lSuccess As Long
             Dim lRetValue As Long         sInfo.cb = Len(sInfo)
             lSuccess = CreateProcess(sNull, _
                                     "d:\kh\game\华夏2.exe", _
                                     ByVal 0&, _
                                     ByVal 0&, _
                                     1&, _
                                     NORMAL_PRIORITY_CLASS, _
                                     ByVal 0&, _
                                      "f:\华夏2\", _
                                     sInfo, _
                                     pInfo)         lRetValue = CloseHandle(pInfo.hThread)
             lRetValue = CloseHandle(pInfo.hProcess)
          End Sub
      

  2.   

    '在你的 d:\kh\game\华夏2.exe 中Private Sub Command1_Click()
        ChDrive "F" '更改当前盘符
        ChDir "F:\华夏2\" '更改当前路径
        Shell "华夏2.exe", vbNormalFocus '执行当前路径下(F:\华夏2\)的程序
    End Sub
      

  3.   

    老大在吗?
    我写这个目的是 我机器本来没有o:盘
    我要运行 d:\kh\run.exe  去读取 o:\盘
    等o:\盘出来后,运行o:\qq飞车\qq飞车子目录\run.exe
    我测试了代码,都不行,能启动,但是登陆按钮为灰色。我启动后把 o:\qq飞车\qq飞车子目录\ 下放一个max(讯闪3.1)用
    o:\qq飞车\qq飞车子目录\max\讯闪3.1.exe再去调用o:\qq飞车\qq飞车子目录\run.exe
    登陆按钮就为亮色,就可以进入了。直接点击o:\qq飞车\qq飞车子目录\run.exe
    登陆按钮也为亮色,就可以进入了。我写的哪里出了问题,请帮忙看看。我代码如下:
    dri 为游戏盘符。o:\
    Pth 为放游戏执行文件的目录 o:\qq飞车\qq飞车子目录\
    Rdini 为游戏可执行的路径 o:\qq飞车\qq飞车子目录\run.exe  Set fd = CreateObject("Scripting.FileSystemObject")
      If fd.FileExists(Rdini) Then
        ChDrive "" & Dri & "\"
        ChDir "" & Pth & "\"
        Shell Chr(34) & Rdini & Chr(34), vbNormalFocus
      Else
        MsgBox "运行游戏超时了!请联系管理员,检测服务器是否正常运行!", vbOKOnly, "Message"
      End If
    End Sub
             Dim pInfo As PROCESS_INFORMATION
             Dim sInfo As STARTUPINFO
             Dim sNull As String
             Dim lSuccess As Long
             Dim lRetValue As Long
             
             sInfo.cb = Len(sInfo)
             lSuccess = CreateProcess(sNull, _
                                     Rdini, _
                                     ByVal 0&, _
                                     ByVal 0&, _
                                     1&, _
                                     NORMAL_PRIORITY_CLASS, _
                                     ByVal 0&, _
                                     Pth, _
                                     sInfo, _
                                     pInfo)         lRetValue = CloseHandle(pInfo.hThread)
             lRetValue = CloseHandle(pInfo.hProcess)
      

  4.   

    用2楼的方法取个别的名字,用"d:\kh\game\华夏1.exe" 去执行 "f:\华夏2\华夏2.exe"
      

  5.   

    运行 d:\kh\run.exe 产生o盘?等o盘出现后再运行o:\qq飞车\qq飞车子目录\run.exe?
      

  6.   

    Rdini、Dri、Pth 分别是什么值?
      

  7.   

    dri=o:\ 
    Pth=o:\qq飞车\qq飞车子目录\ 
    Rdini=o:\qq飞车\qq飞车子目录\run.exe 
    我以前好多游戏都不能启动,现在这种方法已经解决大部分游戏
    只有qq飞车这个 游戏 无法执行,我用人家的调用程序就能调用,比如游戏更新软件 讯闪。我做过以下测试,
    方法一:
    dri=的路径我程序里自动截取的是盘符路径。
    pth 是 可执行文件所在路径。
    Rdini 是 可执行文件本身的路径。
    方法二:
    dri=的路径我程序里自动截取的是盘符路径。
    pth 是游戏目录路径   如"o:\qq飞车"    而不是    "o:\qq飞车\qq飞车子目录\"
    Rdini 是 可执行文件本身的路径。现在只有 qq飞车能执行客户端程序 ,但是 不能点击开始,
    而从盘里面直接点击程序,就能 正常运行 qq飞车,本人纳闷,故坚持跪求,望高手援助。
      

  8.   

    你直接把生成的东西都FileCopy过去,最简单的办法
      

  9.   

    [code=BatchFile]临时生成个批处理,然后执行,内容如下:
    cd d:\kh\game\
    华夏2.exe[/code]
      

  10.   

    临时在游戏所在的盘生成个批处理,比如在d:\kh\game\  下生成play.bat
    然后执行,内容如下:
    华夏2.exe
      

  11.   

    这跟实现语言没啥关系。问题还是在实现逻辑上。
    你是自己写一个loader去加载游戏么?
      

  12.   

    真的麻烦大家了,我 找到一个启动程序的批处理vbs的,自己再测试测试,
    等有结果了我发出来
      

  13.   

    建个快捷方式
    d:\kh\game\play.lnk
    指向
    f:\华夏2\华夏2.exe起始路径设为
    f:\华夏2\用记事本写个d:\kh\game\play.bat
    内容为
    play.lnk在你的程序中shell "d:\kh\game\play.bat"