2011-08-22 19 views
5

Khi tôi cố gắng làm Process.Start("echo", "%cd%"), nó tăng một số System.ComponentModel.Win32Exception: The system cannot find the file specified. Khi tôi làm điều này theo cách thủ công trong cmd, nó chỉ hoạt động như mong muốn. Tôi không bao giờ biết rằng có sự khác biệt ...Process.Start ("echo", "% cd%") ném tệp W32Exception Không tìm thấy

Ngoài ra, khi tôi thực hiện File.Exists(logfile.txt) (w/o path) của một tệp chắc chắn sẽ có, nó sẽ trả về false. Đây là btw lý do cho các echo ở trên: gỡ lỗi ...

Lỗi này không xảy ra trên máy phát triển của tôi, chỉ trên một số khác mà tôi đang thử nghiệm.

Biến đường dẫn có vẻ bình thường. Cả hai đều là WinXP. Cả hai đều chạy NET 3.5

+0

tại sao bạn truy cập tệp mà không có đường dẫn? btw bạn có thể lấy thư mục làm việc hiện tại bằng lệnh 'Environment.CurrentDirectory' – Yahia

Trả lời

9

Hãy thử Process.Start("cmd.exe", "/c echo %CD%")

như xa như tiếng vang không phải là một thực thi nhưng một lệnh bên trong.

+2

/C: Thực hiện lệnh và trả về được chỉ định. Đối với những người tự hỏi điều đó đã làm. – Codezilla

1

Điều này là do echo là một lệnh bảng điều khiển, không phải là một ứng dụng - nó không được đặt trong tệp thực thi của riêng nó.

Đối với vấn đề tồn tại tệp của bạn, nếu bạn chỉ sử dụng tên tệp mà không có đường dẫn, nó sẽ nhìn vào thư mục làm việc, điều này có thể khác với thư mục chứa ứng dụng thực thi và hoàn toàn khác với nơi bạn nghĩ các tệp phải là - bạn hoàn toàn đủ điều kiện cho các đường dẫn của mình sau khi tự biết về cấu hình ứng dụng.

2

Bạn có thể sử dụng System.Environment.CurrentDirectory nếu bạn muốn chuyển thư mục làm việc của ứng dụng sang cmd. AFAIK% CD% là nội bộ để cmd, đó là lý do tại sao Process.Start sẽ không mở rộng nó. Đối với các biến môi trường thông thường, bạn có thể sử dụng Environment.ExpandEnvironmentVariables.

Các vấn đề liên quan