2011-08-14 30 views
5

Tôi đang sử dụng một số mã để khởi động CLR Runtime trong quá trình gốc, sau đó gọi tệp DLL .NET của tôi. NET thực thi bên trong quá trình đó.Lấy id/tên tiến trình thực thi CLR/CLR runtime (vị trí lưu trữ CLR thời gian chạy)

Để tải thực thi .NET khác Tôi đang sử dụng phản chiếu, như vậy:

Assembly.Load(file).EntryPoint.Invoke(null, null); 

Bây giờ, tôi tiêm một ++ dll C mà bắt đầu chạy, nó sau đó gọi dll NET trong đó sử dụng hội. Tải để tải một tệp thực thi .NET khác vào bộ nhớ và thực thi nó.

Khi dll tải NET thực thi của tôi, gọi:

System.Reflection.Assembly.GetExecutingAssembly().Location; 

hoặc thậm chí

Process.GetCurrentProcess().MainModule.FileName; 

này, tất nhiên, trả về vị trí của thực thi chính nó, mặc dù nó đang chạy bên trong một quá trình lưu trữ. Có cách nào tôi có thể lấy tên của quá trình lưu trữ đó không? Trình thám hiểm quy trình cho thấy nó đang chạy bên trong quá trình lưu trữ để tôi biết rằng phần đó hoạt động chính xác.

Tất nhiên nếu tôi chạy các lệnh này bên trong tệp DLL .NET đã được tải trước thì nó sẽ hiển thị tên quy trình thích hợp.

Cảm ơn.

EDIT:

Tôi đã thử GetEntryAssembly()GetCallingAssembly() là tốt.

Trả lời

4

KHÔNG LÀM ĐIỀU.

Bạn không được tiêm khuôn khổ .NET vào bất kỳ quy trình nào không phải của bạn. Nó có thể có một khung công tác khác đã được tải hoặc mong muốn tải một phiên bản khung công tác khác sau này.

Bạn có thể lấy tên của quy trình lưu trữ bằng cách gọi GetModuleFileName (GetModuleHandle (NULL)); (Cả hai cuộc gọi API là P/Invoke. [1][2]).

+0

Xin lỗi Per Lundberg, nhưng tôi không thể ghi nhận cho bạn bản chỉnh sửa là StackOverflow sẽ không khắc phục được lỗi khả năng truy cập của họ. – Joshua

0

NẾU tôi hiểu câu hỏi của bạn một cách chính xác thì bạn muốn tìm "quy trình gốc" ... Có nhiều cách khác nhau để thực hiện điều đó, hoặc được quản lý hoặc qua P/Gọi ... cho các mẫu mã đẹp về cách thực hiện xem How to get parent process in .NET in managed way

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