PDA

View Full Version : سوال: خطا در اجراي يك اسكريپت - دريافت اطلاعات سخت افزاري سيستم



Felezi
سه شنبه 23 شهریور 1389, 16:57 عصر
با سلام . من نياز به اسكريپتي براي دريافت اطلاعات سخت افزاري سيستم دارم. كد زير رو در وب پيدا كردم. اما اجرا نميشه و خطاي "Error on page" در پايين مرورگر ظاهر ميشه. اگه ممكنه راهنمايي كنيد.
قبلاً اين سوال را مطرح كردم و دوست عزيزمون آقاي موسوي در پاسخ گفت بايد ActivX را فعال نمايم و تنها IE اين اسكريپت رو اجرا مي كنه اما حتي با فعال كردن ActiveX هم مشكل من برطرف نشد. لطفاً راهنمايي بنماييد.
من نياز به دريافت اطلاعات : mainboard, cpu , ram , hard دارم



(http://barnamenevis.org/forum/showthread.php?t=233646#viewSource)


01.<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

02.<html>
03.<head>
04.<title></title>
05.<meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
06.<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
07.<script id=clientEventHandlersJS language=javascript>
08.<!--
09.function Button1_onclick() {
10. var locator = new ActiveXObject ("WbemScripting.SWbemLocator");
11. var service = locator.ConnectServer(".");
12. var properties = service.ExecQuery("SELECT * FROM Win32_OnBoardDevice");
13. // var e = new Enumerator (properties);
14. document.write("<table border=1>");
15. for (;!e.atEnd();e.moveNext ())
16. {
17. var p = e.item ();
18. document.write("<tr>");
19. document.write("<td>" + p.Description + "</td>");
20. document.write("<td>" + p.DeviceType + "</td>");
21. document.write("<td>" + p.Enabled + "</td>");
22. document.write("<td>" + p.Tag + "</td>");
23. document.write("</tr>");
24. }
25. document.write("</table>");
26.}
27.//-->
28.</script>
29.</head>
30.<body>
31.<INPUT id="Button1" type="button" value="Button"
32.name="Button1" language=javascript onclick="return Button1_onclick()">
33.</body>
34.</html>

mehdi.mousavi
سه شنبه 23 شهریور 1389, 23:47 عصر
با سلام . من نياز به اسكريپتي براي دريافت اطلاعات سخت افزاري سيستم دارم. كد زير رو در وب پيدا كردم. اما اجرا نميشه و خطاي "Error on page" در پايين مرورگر ظاهر ميشه. اگه ممكنه راهنمايي كنيد. قبلاً اين سوال را مطرح كردم و دوست عزيزمون آقاي موسوي در پاسخ گفت بايد ActivX را فعال نمايم و تنها IE اين اسكريپت رو اجرا مي كنه اما حتي با فعال كردن ActiveX هم مشكل من برطرف نشد. لطفاً راهنمايي بنماييد. من نياز به دريافت اطلاعات : mainboard, cpu , ram , hard دارم

سلام.
قبل از هر چیزی، ابتدا به این مساله دقت کنید که خط 13 در کد شما، Comment شده، در نتیجه متغیر e مقدار دهی نشده و این کاملا طبیعی هستش که این کد کار نکنه. اما اگر اون خط رو از Comment خارج کردید و باز هم کد شما در IE کار نکرد، احتمالا ماشین Target شما، از WMI Driver مربوطه پشتیبانی نمیکنه. در واقع سوال اصلی اینه که WMI چطور کار میکنه؟

شما در واقع دارید از طریق یک ActiveX کامپوننتی رو CreateInstance می کنید. این Component از طریق Windows Management API به CIMOM متصل میشه. CIMOM از طریق CIM Repository و Provider های موجود، میتونه اطلاعات مورد نظر شما رو Query کنه و به شما برگردونه.

اگر بعد از اینکه خط 13 رو از Comment خارج کردید، کد شما اطلاعات مورد نظر رو بهتون برنگردوند (با فرض به اینکه WMI نصب شده باشه روی ماشین، و الا کاملا طبیعی هستش که new ActiveXObject به شما null برگردونه و ...)، احتمالا Provider مورد نظر روی سیستم نصب نشده.

برای تایید این مساله دو روش وجود داره:


WMI Tools رو از سایت مایکروسافت Download کنید (http://www.microsoft.com/downloads/en/details.aspx?familyid=6430f853-1120-48db-8cc5-f2abdc3ed314&displaylang=en). پس از نصب این برنامه، WMI Object Browser رو اجرا کنید و به root\CIMV2 namespace متصل بشید. سپس، دنبال Win32_OnBoardDevice بگردید و ببینید آیا میتونید Instance ای از اون رو Create کرده و Query کنید یا خیر. (این روش نسبت به روش بعدی، سخت تر هستش، بنابراین اگر با مفاهیم بنیادی WMI آشنا نیستید، روش بعدی رو در پیش بگیرید).
WMI Explorer رو از این آدرس Download کنید (http://www.hostmonitor.biz/download/wmiexplorer.zip). فایل EXE موجود در اون رو اجرا کنید. در Query Tab، این Query رو بنویسید:


select * from Win32_OnBoardDevice

و کلید Execute رو فشار بدید. اگر WMI Driver مناسب وجود داشته باشه، نتایجی که دنبالش بودید رو اینجا خواهید دید. در غیر اینصورت، پنجره زیری کماکان خالی باقی خواهد موند و این به این معنی هستش که شما هم نمیتونید از طریق کدی که نوشته اید (حتی اگر Error نده)، این اطلاعات رو دریافت کنید.

موفق باشید.