2015-11-19 2 views
0

Я создал .bat-файл с помощью DevCon для перезапуска устройства и при его запуске. Когда я пытаюсь запустить тот же файл в форме VFP, используя команду run при щелчке, он говорит, что DevCon не распознается.CMD, DevCon и Visual Fox Pro

! cmd/c "C: \ Windows \ System32 \ restart.bat"

! «C: \ Windows \ System32 \ restart.bat»

Я попытался сделать Sistem32 исходным путем и начать по умолчанию, и он не работает в любом случае. Кажется, что CMD запутывается в этом процессе. Заранее благодарю за любую помощь.

+0

Помогло бы узнать, что находится в файле restart.bat. – Squashman

+0

его простая строка devcon перезапускает «некоторое устройство» – SantaMaria

+0

Тогда почему бы не указать весь путь к исполняемому файлу devcon в вашем пакетном файле. – Squashman

ответ

1

Я бы попробовал использовать ShellExecute API. ie:

#Define SW_HIDE    0 
#Define SW_NORMAL   1 
#Define SW_SHOWMINIMIZED 2 
#Define SW_SHOWMAXIMIZED 3 

Local lcResult 
lcResult = ShellExec('C:\Windows\System32\restart.bat', '', 'C:\Windows\System32', SW_NORMAL) 
If !Empty(m.lcResult) && error 
    Messagebox(m.lcResult) 
Endif 

Function ShellExec 
    Lparameters tcExecutable,tcParams,tcWorkingDir,tnShowType,tcOperation 

    Declare Long ShellExecute In "shell32.dll" ; 
     long HWnd, String lpszOp, ; 
     string lpszFile, String lpszParams, ; 
     string lpszDir, Long nShowCmd 
    tcOperation = Iif(Empty(m.tcOperation), 'Open', m.tcOperation) 
    tcExecutable = Iif(Empty(m.tcExecutable), '', m.tcExecutable) 
    tcParams  = Iif(Empty(m.tcParams), '', m.tcParams) 
    tcWorkingDir = Iif(Empty(m.tcWorkingDir), '', m.tcWorkingDir) 
    tnShowType = Iif(Type('m.tnShowType') # 'N', SW_SHOWNORMAL, m.tnShowType) 
    Local lnResult, lcError 
    lcError = '' 
    lnResult = ShellExecute(0,m.tcOperation,m.tcExecutable,m.tcParams,m.tcWorkingDir,m.tnShowType) 
    If !(m.lnResult > 32) && Error 
     lcError = GetShExecErrorMsg(m.lnResult) 
    Endif 
    Return m.lcError 
Endfunc 

Function GetShExecErrorMsg 
    Lparameters tnErrNum 
    Local Array aErrors[1] 
    Local lcMessage, lcErrors,lnErrors,ix 

    TEXT to m.lcErrors noshow 
0,The operating system is out of memory or resources. \n 
2,The specified file was not found. \n 
3,The specified path was not found. \n 
11,The .exe file is invalid (non-Win32® .exe or error in .exe image). \n 
5,The operating system denied access to the specified file. \n 
27,The file name association is incomplete or invalid. \n 
30,The DDE transaction could not be completed because 
other DDE transactions were being processed. \n 
29,The DDE transaction failed. \n 
28,The DDE transaction could not be completed because the request timed out. \n 
32,The specified dynamic-link library was not found. \n 
31,There is no application associated with the given file name extension. 
This error will also be returned if you attempt to print a file that is not printable. \n 
8,There was not enough memory to complete the operation. \n 
26,A sharing violation occurred. \n 
    ENDTEXT 
    Clear 
    lnErrors = Alines(aErrors,m.lcErrors,.T.,'\n') 
    For ix=1 To m.lnErrors 
     If (Val(Chrtran(Left(aErrors[m.ix],; 
       At(',',aErrors[m.ix])-1),Chr(13)+Chr(10),'')) = m.tnErrNum) 
      lcMessage = Substr(aErrors[m.ix],At(',',aErrors[m.ix])+1) 
      Exit 
     Endif 
    Endfor 
    If Empty(m.lcMessage) 
     lcMessage = 'An unspecified error occurred.' 
    Endif 
    Return m.lcMessage 
Endfunc 
+0

попробовал, и это похоже на bleh. плохо прочитайте больше о выполнении оболочки и измените ее на мои нужды, если ее работающий плохо сообщит, что вы знаете, – SantaMaria

+0

выглядит так, трюк благодарит вас за совет, с небольшим поиском об этом ive удалось заставить его работать DECLARE INTEGER ShellExecute IN shell32 .dll; INTEGER hndWin,; STRING cAction,; STRING cFileName,; STRING cParams,; STRING cDir,; INTEGER nShowWin ShellExecute (0, "open", "Batch Files \ COMChanger2.bat", "", "", 0) MESSAGEBOX ("Посмотрите, нормально ли это) – SantaMaria