2011-08-22 14 views
5

Kiedy próbuję wykonać Process.Start("echo", "%cd%"), powstaje System.ComponentModel.Win32Exception: The system cannot find the file specified. Kiedy robię to ręcznie w cmd po prostu działa tak, jak powinno. Nigdy nie wiedziałem, że istnieje różnica ...Process.Start ("echo", "% cd%") zgłasza plik W32Exception nie został znaleziony

Również, gdy wykonuję File.Exists(logfile.txt) (bez ścieżki) pliku, który powinien z pewnością tam być, zwraca wartość false. To jest jeden z powodów dla echo powyżej: debugowanie ...

Ten błąd nie występuje na mojej maszynie do opracowywania, tylko na innej, na której testuję.

Zmienna Ścieżka wygląda normalnie. Oba są WinXP. Oba są uruchomione .NET 3.5

+0

Dlaczego uzyskujesz dostęp do pliku bez ścieżki? btw można uzyskać bieżący katalog roboczy przy użyciu polecenia 'Environment.CurrentDirectory' – Yahia

Odpowiedz

9

Spróbuj Process.Start("cmd.exe", "/c echo %CD%")

miarę echo nie jest wykonywalny, ale komenda wewnątrz.

+2

/C: Wykonuje określone polecenie i zwraca. Dla tych, którzy zastanawiają się, co to było. – Codezilla

1

Dzieje się tak, ponieważ echo jest poleceniem konsoli, a nie aplikacją - nie znajduje się w pliku wykonywalnym.

Jeśli chodzi o problem istnienia pliku, jeśli po prostu użyjesz nazwy pliku bez ścieżki, to będzie wyglądać w katalogu roboczym, może to być inne niż w katalogu zawierającym aplikację wykonawczą, i zupełnie inne od miejsca, w którym uważasz, że pliki powinny być - powinieneś w pełni zakwalifikować swoje ścieżki po zapoznaniu się z konfiguracją aplikacji.

2

Możesz użyć System.Environment.CurrentDirectory, jeśli chcesz przekazać katalog roboczy swojej aplikacji do cmd. AFAIK% CD% jest wewnętrzną wartością cmd, dlatego Process.Start nie rozszerzy jej. W przypadku zwykłych zmiennych środowiskowych można użyć Environment.ExpandEnvironmentVariables.

Powiązane problemy