2013-01-24 32 views
0

我正在編寫一個應該執行一些MSSQL數據庫操作的安裝程序。這些操作位於.cmd文件中,並通過MSSQL Server 2000中的OSQL.exe執行。NSIS ExecWait和OSQL應用程序

現在出現了我的問題。當我雙擊批處理文件時,它將執行OK。但是,如果我通過ExecWait在我的安裝程序(或Exec或ExecShell,嘗試所有,沒有區別)運行它,Windows說沒有找到命令osql ...通過SetOutPath設置的當前工作目錄是與我的目錄相同的目錄.cmd文件位於

我也試圖簡化儘可能這種情況:

sql.cmd: 

osql 
pause 

而在我的NSIS源我有:

Section "Perform DB operations" SEC03 
    ReadEnvStr $0 SYSTEMDRIVE 
    SetOutPath "$0\DBUtils" 
    SetOverwrite try 
    File /r "..\source_files\DBUtils\*" 
    ExecWait '"$0\DBUtils\sql.cmd"' 
SectionEnd 

我的問題發生在這裏,太。通過雙擊或通過從命令行調用.cmd它可以正常執行,但出於某種神祕原因,NSIS的Exec似乎沒有找到osql。有人有一個想法,爲什麼會發生?

回答

0

你的硬盤在哪裏是osql.exe?嘗試修改您的cmd以使用絕對路徑。

您可以檢查您的安裝與看到的PATH:

ReadEnvStr $0 PATH 
MessageBox MB_OK "PATH: $0" 

我不知道,但也許如果你的安裝程序爲不同的用戶(管理員)運行,那麼它可能有不同的路徑.. 。

+0

嗨!它位於C:\ Program Files \ Microsoft SQL Server \ 80 \ Tools \ Binn \ OSQL.exe中,C:\ Program Files \ Microsoft SQL Server \ 80 \ Tools \ Binn \包含在PATH環境變量中。我一定會嘗試把一切都改變成絕對路徑。但是,問題在於.cmd不直接爲我的程序執行數據庫操作,而是屬於第三方組件。因此,我寧願讓第三方提供的.cmd文件保持不變。 – Peter

+0

它使用絕對路徑。但是,發現爲什麼它不能用相對路徑工作會很好。順便說一下,我試圖將osql更改爲一些應該位於PATH中的Windows可執行文件,例如calc或writepad,並且它們可以工作。 – Peter

+0

我更新了答案 –

相關問題