2013-08-22 53 views
1

在win7下運行時(模塊)從不給我任何東西。我期望第一個參數始終是exe文件的路徑,但它總是空的。如何使用運行時結構獲取exe路徑?

+2

代碼?更多上下文?鏈接到文檔/庫? – BCS

+0

runtime.argc以勝利形式啓動後的core.runtime。就像在示例winsamp中一樣。 – BBasile

回答

1

當使用WinMain函數時(即使在調用Runtime.initialize後),我可以確認運行時返回空值。

如果編譯器發現WinMain函數,Druntime應嘗試調用WinAPI函數來填充成員rt_args/rt_cArgs。通常可以使用GetCommandLineCommandLineToArgvW來提取參數。應該爲此提交一個bug到bugzilla

至於當前進程的實際路徑,有一個開放的pull request應該使其進入下一個2.064版本。

1

如果只是獲取當前路徑,std.file.getcwd()會爲您提供當前目錄。

+0

正在運行進程路徑。不是cwd – BBasile

+0

使用這個會導致錯誤,我最近在一個軟件上看到了這個,它在一個錯誤的目錄中寫入了一個ini,因爲它是從控制檯啓動的...(在代碼中dev是假定cwd是exe位置) – BBasile

0
C:\work\so> dmd bbasile01.d 

C:\work\so> bbasile01.exe 
C:\work\so\bbasile01.exe 

C:\work\so> type bbasile01.d 
import std.stdio; 

int main(string[] args) { 
    writeln(args[0]); 
    return 0; 
} // main() function 

編寫跨平臺實現,讓正在運行的進程路徑的功能,不是一個簡單的任務......它已經在數百個(不d相關的)線程在這裏的StackOverflow的討論中來。

+0

我不是在Win 7下勉強這個代碼,完全沒有給我任何代碼。我知道第一個參數是exe的路徑,但問題是:從我這邊來看並不是這樣。我不明白爲什麼。 – BBasile

+0

通常我在Linux上工作,並且args [0]給出了我期望的可執行文件名。我打開了另一臺裝有Windows 7旗艦版的電腦。我在它上面安裝了dmd並用test.d文件名編譯了你的代碼。當我執行時,它會在屏幕上顯示「測試」,這已經是test.exe的名稱了,這是正確的。我認爲你的安裝有問題。 (Win 7,32位,DMD 2.063.2) – tcak

+0

@BBasile:上面的例子是在Windows 7上進行的。更確切地說,VER給出了'Microsoft Windows [Version 6.1.7601]',「dmd -v」給出了'DMD32 D Compiler v2.063.2'。嘗試一些其他版本的DMD ... – DejanLekic

相關問題