簡體   English   中英

如何在網頁上獲取系統屬性?

[英]How to get system properties on a webpage?

我正在asp.net上的網站上工作。 我需要網頁上的RAM,處理器,硬盤驅動器等系統屬性。 如何獲得?

如果您要獲取客戶端計算機的統計信息,請放棄; 不可能。 (除非您編寫了瀏覽器插件,否則您實際上不應該這樣做)

如果您嘗試獲取Web服務器的統計信息,則很有可能。

這是我對此類頁面的實現:

<%@ Page Title="Server Stats" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true"
    CodeFile="Stats.aspx.cs" Inherits="Stats" %>

<%@ Import Namespace="System.Diagnostics" %>
<%@ Import Namespace="Microsoft.VisualBasic.Devices" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server">
    <style type="text/css">
        body {
            background-color: #9DC0E4;
        }
        table.Details {
            width: 550px;
            margin-left: -275px;
            left: 50%;
            position: absolute;
        }
        table.Details tbody.Group {
            border-bottom: solid black 2px;
            margin-bottom: 15px;
        }
        table.Details th.Group {
            font-size: x-large;
            border-bottom: dashed 1px navy;
        }
        table.Details th.Name {
            text-align: left;
        }
        table.Details td.Value {
            text-align: right;
        }
    </style>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
    <%
        var computer = new ComputerInfo();
        using (var iis = Process.GetCurrentProcess())
        using (var cpu = new PerformanceCounter("Processor", "% Processor Time", "_Total"))
        using (var uptime = new PerformanceCounter("System", "System Up Time")) {
            cpu.NextValue();
            uptime.NextValue();
    %>
    <table class="Details">
        <tbody class="Group">
            <tr>
                <th class="Group" colspan="2">Environment</th>
            </tr>
            <tr>
                <th class="Name">Local server time</th>
                <td class="Value">
                    <%= DateTime.Now.ToString("F")%></td>
            </tr>
            <tr>
                <th class="Name">OS</th>
                <td class="Value">
                    <%= computer.OSFullName%><br />
                    <%= Environment.OSVersion.ToString()%></td>
            </tr>
            <tr>
                <th class="Name">Machine name</th>
                <td class="Value">
                    <%= Environment.MachineName%></td>
            </tr>
            <tr>
                <th class="Name">User name</th>
                <td class="Value">
                    <%= Environment.UserName%></td>
            </tr>
            <tr>
                <th class="Name">Windows domain</th>
                <td class="Value">
                    <%= Environment.UserDomainName%></td>
            </tr>
        </tbody>
        <tbody class="Group">
            <tr>
                <th class="Group" colspan="2">IIS</th>
            </tr>
            <tr>
                <th class="Name">IIS Uptime</th>
                <td class="Value">
                    <%= (DateTime.Now- iis.StartTime).ToApproximateString()%></td>
            </tr>
            <tr>
                <th class="Name">Priority</th>
                <td class="Value">
                    <%= iis.PriorityClass%></td>
            </tr>
            <tr>
                <th class="Name">Physical Memory Used</th>
                <td class="Value">
                    <%= ToSizeString(iis.WorkingSet64)%></td>
            </tr>
            <tr>
                <th class="Name">Virtual Memory Used</th>
                <td class="Value">
                    <%= ToSizeString(iis.VirtualMemorySize64)%></td>
            </tr>
        </tbody>
        <tbody class="Group">
            <tr>
                <th class="Group" colspan="2">Hardware</th>
            </tr>
            <tr>
                <th class="Name">Processors</th>
                <td class="Value">
                    <%= Environment.ProcessorCount.ToString()%></td>
            </tr>
            <tr>
                <th class="Name">Physical memory</th>
                <td class="Value">
                    <%= ToSizeString(computer.TotalPhysicalMemory)%></td>
            </tr>
            <tr>
                <th class="Name">Virtual memory</th>
                <td class="Value">
                    <%= ToSizeString(computer.TotalVirtualMemory)%></td>
            </tr>
        </tbody>
        <tbody class="Group">
            <tr>
                <th class="Group" colspan="2">Performance</th>
            </tr>
            <tr>
                <th class="Name">Uptime</th>
                <td class="Value">
                    <%= TimeSpan.FromSeconds(uptime.NextValue()).ToApproximateString()%>
                </td>
            </tr>
            <tr>
                <th class="Name">CPU Usage</th>
                <td class="Value">
                    <%= (cpu.NextValue()/100).ToString("p")%>
                </td>
            </tr>
            <tr>
                <th class="Name">Physical memory free</th>
                <td class="Value">
                    <%= ToSizeString(computer.AvailablePhysicalMemory)%></td>
            </tr>
            <tr>
                <th class="Name">Virtual memory free</th>
                <td class="Value">
                    <%= ToSizeString(computer.AvailableVirtualMemory)%></td>
            </tr>
        </tbody>
    </table>
    <%} %>
</asp:Content>

ToSizeString.cs文件中定義:

protected static string ToSizeString(double bytes) {
    var culture = CultureInfo.CurrentUICulture;
    const string format = "#,0.0";

    if (bytes < 1024)
        return bytes.ToString("#,0", culture);
    bytes /= 1024;
    if (bytes < 1024)
        return bytes.ToString(format, culture) + " KB";
    bytes /= 1024;
    if (bytes < 1024)
        return bytes.ToString(format, culture) + " MB";
    bytes /= 1024;
    if (bytes < 1024)
        return bytes.ToString(format, culture) + " GB";
    bytes /= 1024;
    return bytes.ToString(format, culture) + " TB";
}

ToApproximateString是在其他地方定義的擴展方法:

public static string ToApproximateString(this TimeSpan time) {
    if (time.TotalDays > 14)
        return ((int)(time.TotalDays / 7)).ToString("#,0.0") + " weeks";
    if (14 - time.TotalDays < .75)
        return "two weeks";
    if (time.TotalDays > 1)
        return time.TotalDays.ToString("#,0.0") + " days";
    else if (time.TotalHours > 1)
        return time.TotalHours.ToString("#,0.0") + " hours";
    else if (time.TotalMinutes > 1)
        return time.TotalMinutes.ToString("#,0.0") + " minutes";
    else
        return time.TotalSeconds.ToString("#,0.0") + " seconds";
}

此信息可在后面的代碼中訪問,因此您可以嘗試將其與頁面加載結合使用以收集數據以供aspx頁面使用。 System.Environment中可以訪問更多信息,因此請檢查一下!

public override void PageLoad() {

         string[] logicalDrives  = System.Environment.GetLogicalDrives();
         //do stuff to put it in the view.
}

要獲取客戶端計算機的信息,您不能在Web應用程序中執行此操作,除非您編寫在其計算機上運行的ActiveX控件或Java插件。

但是不建議您這樣做...防病毒和惡意軟件程序可能會認為您做不到。

您不能在ASP.NET頁面中。

但是,您可以制作Windows窗體並使用ClickOnce發布它

當用戶單擊頁面上的鏈接時,您可以彈出一個Windows窗體。 要顯示或保存數據,請使用Web服務。 用戶會覺得他還沒有離開您的網站。

您可以在C#中使用ManagementSearcherObject來獲取系統信息,例如RAM。在VB.NET中,您可以僅使用My.Computer。

我尚未使用WPF瀏覽器應用程序,但是您應該可以在其中執行相同的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM