Chúng tôi có thể kiểm tra xem ứng dụng đang chạy hay chương trình có sử dụng .Net framework để thực thi chính nó không?Cách kiểm tra xem chương trình có đang sử dụng .NET không?
Trả lời
Có một mẹo tôi từng học được từ số list of interview questions của Scott Hanselman. Bạn có thể dễ dàng liệt kê tất cả các chương trình đang chạy NET tại dấu nhắc lệnh bằng cách sử dụng:
tasklist /m "mscor*"
Nó sẽ liệt kê tất cả các quá trình có mscor*
giữa các module được nạp họ.
Chúng ta có thể áp dụng cùng một phương pháp trong mã:
public static bool IsDotNetProcess(this Process process)
{
var modules = process.Modules.Cast<ProcessModule>().Where(
m => m.ModuleName.StartsWith("mscor", StringComparison.InvariantCultureIgnoreCase));
return modules.Any();
}
Lưu ý rằng điều này sẽ loại bỏ các quy trình Mono có thể xảy ra. – Dykam
@Dykam Không phải thời gian chạy của mono hay còn gọi là mscorlib.dll? –
Thời gian chạy chỉ là 'mono'. Hoặc 'mono.exe' trên cửa sổ. .Net sử dụng PE để cho hệ điều hành sử dụng mscorlib.dll để khởi động ứng dụng, nhưng mono không làm như vậy. Và lib cốt lõi thực sự được gọi là corlib.dll Tôi nghĩ, vì nó không phải là corlib của MS. – Dykam
Sử dụng chức năng System.Reflection.Assembly.LoadFrom
để tải tệp .exe. Hàm này sẽ ném ngoại lệ nếu bạn cố tải tệp nhị phân không phải là assembly .NET.
-1: Anh ta hỏi về một ứng dụng đang chạy –
nó tạo nên sự khác biệt nào? ứng dụng đang chạy không có tệp .exe? –
Trong trường hợp đó, hãy chỉ cho anh ta cách tìm tệp EXE tương ứng với chương trình đang chạy; và chỉ cho anh ta cách đối phó với khả năng quá trình của anh ấy không thể truy cập được đọc vào tệp .EXE. –
Lập trình bạn sẽ nhận được tên hình ảnh bắt đầu bằng cách sử dụng API Win32 như NtQueryInformationProcess
hoặc sử dụng .Net System.Diagnostics.Process.GetProcesses()
và đọc Process.StartInfo.FileName
.
Sau đó mở và giải mã các tiêu đề PE của hình ảnh đó sử dụng nội dung quy định trong bài viết MSDN dưới đây:
http://msdn.microsoft.com/en-us/magazine/cc301808.aspx
Hãy cẩn thận: sẽ chỉ phát hiện NET xây dựng cụm ví dụ sẽ không phát hiện Win32 EXE tự động lưu trữ CLR bằng cách sử dụng API CorHost.
Sử dụng CLR COM giao diện ICorPublish và ICorPublishProcess. Cách đơn giản nhất để làm điều này từ C# là để mượn một số mã từ debugger SharpDevelop, và làm như sau:
ICorPublish publish = new ICorPublish();
ICorPublishProcess process;
process = publish.GetProcess(PidToCheck);
if (process == null || !process.IsManaged)
{
// Not managed.
}
else
{
// Managed.
}
Tôi đã tự hỏi, nếu bạn làm điều này từ C#, theo đó điều kiện này sẽ kiểm tra báo cáo "không được quản lý"? – stakx
Dường như nó sẽ chỉ xem xét quản lý các quy trình có cùng CLR được sử dụng - https://social.msdn.microsoft.com/Forums/en-US/fac08eee-001d-4566-b1e7-fda1ddbc37e7/icorpublishgetprocess-throws- systemargumentexception-value-does-không-fall-in-the-expected? forum = netfxtoolsdev. Vì vậy, một trong những nên cẩn thận với nó. –
Tôi đề nghị tải DotNetReflector của Redgate và kiểm tra nếu nó có thể mở ứng dụng.
Tôi biết điều này là khoảng một triệu năm quá muộn, nhưng trong trường hợp nó giúp - phương pháp ưa thích của tôi để tìm ra nếu một exe đang sử dụng .net là để chạy MSIL disassembler chống lại nó đi kèm với .net SDK. Nếu một exe .net bạn thực sự có, bạn sẽ nhận được một phân tích đồ họa đẹp về nội dung của nó; nếu một exe cũ win32 đơn giản, bạn sẽ nhận được một thông báo cho bạn biết như vậy.
Câu trả lời hay. Cụ thể, chạy ILDASM.EXE, được cài đặt tự động với Visual Studio. Xem: http://msdn.microsoft.com/en-us/library/f7dy01k1(v=vs.110).aspx Để khởi chạy ILDASM từ Win8/VS2013: Start -> Visual Studio Tools -> Developer Command Prompt cho VS2013 . Từ Win8/VS2012: Bắt đầu -> Developer Command -> Developer Command Prompt cho VS2012. Từ Win7: Tất cả các chương trình -> Microsoft Visual Studio -> Công cụ Visual Studio -> Visual Studio Command Prompt. –
- 1. Python/win32com - Kiểm tra xem Chương trình có đang mở
- 2. Làm cách nào để kiểm tra xem chương trình có đang chạy lần đầu tiên không?
- 3. Có sử dụng GetProcessesByName hay nhất để kiểm tra xem một tiến trình đang chạy không?
- 4. Cách kiểm tra theo chương trình xem ứng dụng có đang chạy ở chế độ gỡ lỗi hay không?
- 5. kiểm tra xem một số chương trình exe có đang chạy trên các cửa sổ
- 6. Có cách nào để kiểm tra xem var có đang sử dụng setInterval() không?
- 7. Delphi: Kiểm tra xem tệp có đang được sử dụng hay không
- 8. C# .NET: Cách kiểm tra xem chúng tôi có đang chạy bằng pin không?
- 9. Kiểm tra xem quy trình có đang chạy
- 10. kiểm tra xem chương trình có đang chạy không và chạy nó nếu không có trong perl
- 11. cách kiểm tra xem 2 tệp có bằng .NET không?
- 12. Kiểm tra xem kết nối ADODB có đang mở không
- 13. Kiểm tra xem tệp có đang được sử dụng hay ứng dụng nào không?
- 14. Kiểm tra xem tệp có đang mở
- 15. Cách kiểm tra xem tập tin có đang được sử dụng bởi quy trình khác không - Powershell
- 16. Cách kiểm tra xem các yêu cầu HTTP có đang mở trong trình duyệt không?
- 17. Kiểm tra xem Chronometer có đang chạy
- 18. Làm cách nào để kiểm tra xem bluetooth có được bật theo chương trình không?
- 19. Sử dụng rspec để kiểm tra chương trình C/C++
- 20. Chương trình hàng loạt để kiểm tra xem quy trình có tồn tại không
- 21. Có cách nào để kiểm tra xem con trỏ có đang lơ lửng không?
- 22. Kiểm tra xem tập lệnh php có đang chạy không
- 23. Cách phát hiện xem MemoryMappedFile có đang sử dụng không
- 24. Trong .NET MVC, có cách nào dễ dàng để kiểm tra xem tôi có đang ở trang chủ không?
- 25. Cách kiểm tra xem SWF có đang chạy dưới dạng ứng dụng AIR không?
- 26. Cách kiểm tra xem JCheckBox có được kiểm tra không?
- 27. Kiểm tra xem tôi có đang trong quá trình hoãn_job hay không
- 28. Cách kiểm tra xem ứng dụng WPF có đang chạy không?
- 29. Kiểm tra theo lập trình mã .NET
- 30. Cách kiểm tra xem quy trình có quyền quản trị
Xoay màn hình quy trình và nếu tệp thực thi được đánh dấu màu vàng, đó là ứng dụng được quản lý. Hurr. – Will
Will, tôi nghĩ bạn có nghĩa là Process Explorer;) –