2010-07-30 27 views
5

Tôi muốn xác định đường dẫn tuyệt đối của các tệp được sử dụng bởi một quy trình đã biết bằng cách đọc dòng lệnh. Hiện tại, quá trình này được bắt đầu với các đường dẫn tương đối trong dòng lệnh trỏ đến các tệp khác nhau như tệp cấu hình. Vấn đề là nếu các đường dẫn không liên quan đến thư mục chứa tệp thi hành, tôi không có cách nào để chuyển đổi các đường dẫn tương đối được cung cấp tại dòng lệnh, thì tôi không thể chắc chắn 100%.C# Nhận thư mục làm việc của một quy trình khác

Ví dụ hai tập tin batch:

BATCH 1 CD c: \ test \ bin test.exe .. \ config \ config.ini

BATCH 2 CD c: \ test bin \ test.exe config \ config.ini

Đối với tệp hàng loạt, dòng lệnh tôi nhận được là "c: \ test \ bin \ test.exe .. \ config \ config.ini" và đối với tệp hàng loạt hai tôi nhận được "c: \ test \ bin \ test.exe config \ config.ini". Vì vậy, xem này tôi không thể giải quyết các đường dẫn.

Dù sao cho người mới bắt đầu, tôi nhận được dòng lệnh từ truy vấn WMI bằng cách sử dụng Trình quản lý tìm kiếm tài khoản. Bây giờ tôi cần để có được thư mục làm việc quá trình đã được bắt đầu từ để giải quyết các đường dẫn được thông qua tại dòng lệnh nhưng làm thế nào?

EDIT: Tôi đã quên một chi tiết chính. Tôi muốn nhận được thư mục làm việc của một quá trình khác. Về cơ bản, chương trình chính của tôi tập hợp thông tin từ một chương trình khác. Tôi có thể xác định ID tiến trình vì tôi biết tên của tệp thực thi. Tôi cũng có thể xác định dòng lệnh. Bây giờ tôi phải tìm thư mục làm việc hoặc thư mục hiện hành mà tệp thực thi đã được khởi động để tôi có thể giải quyết các đường dẫn tương đối của dòng lệnh. Tôi hy vọng tôi đã làm cho câu hỏi rõ ràng hơn.

+1

Tôi nghĩ tiêu đề câu hỏi không hoàn toàn là những gì bạn đang yêu cầu. "Có được thư mục làm việc quá trình" là một câu hỏi của thư mục làm việc, có thể có lẽ thay đổi trong khi thực thi, nhưng câu hỏi chính nó dường như yêu cầu thư mục thực thi được bắt đầu, có thể khá khác nhau (và không thay đổi trong quá trình thực hiện). @ chris166 của câu trả lời địa chỉ tiêu đề của câu hỏi của bạn, nhưng câu trả lời của tôi địa chỉ các câu hỏi chính nó, IMHO. Có lẽ bạn có thể làm rõ sự nhầm lẫn? – Cyberherbalist

Trả lời

7

Tôi nghĩ rằng Environment.CurrentDirectory sẽ cung cấp cho bạn thư mục tệp thực thi được bắt đầu. Nó chỉ đáng tin cậy khi bắt đầu quá trình, vì nó có thể thay đổi sau này.

Hoặc có thể thử Process.GetCurrentProcess().StartInfo.WorkingDirectory. Tôi đã không thử nó bản thân mình, chỉ cần nhìn nó lên trên MSDN

+0

Tôi đã thử tất cả điều này trong một ứng dụng giao diện điều khiển và Environment.CurrentDirectory xuất hiện với thư mục mà ứng dụng bắt đầu, như bạn đã nghĩ. Nhưng Process.GetCurrentProcess() StartInfo.WorkingDirectory xuất hiện dưới dạng một chuỗi rỗng. Điều làm tôi ngạc nhiên - tôi nghĩ nó sẽ giống nhau. Một thử nghiệm nhỏ hơn nữa cho thấy rằng nếu tôi tạo ra một phím tắt để thực thi, sau đó sửa đổi các "Bắt đầu trong" tài sản của phím tắt để một cái gì đó (như "C: \"), thì đó là những gì sau đó trong StartInfo.WorkingDirectory. – Cyberherbalist

1

Bạn đã thử Application.ExecutablePath?

Ngoài ra, có rất nhiều Đường dẫn có thể truy xuất từ ​​Application

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