2010-05-14 9 views
9

Ich brauche einen Weg, damit meine .Net Winform App erkennt, ob meine App auf einem Laptop oder einer Workstation geöffnet ist.Wie kann ich feststellen, ob ein Benutzer einen Laptop verwendet?

Ich habe Environment und SystemInformation betrachtet, aber ohne Erfolg. Würde WMI den Trick machen?

Danke für die Richtung ....


Da bat ich um eine Anwendung, die Replikation verwendet Merge unseren Benutzern zu ermöglichen, in Mitglieder Häusern zu arbeiten. Einige, die das Programm benutzen, gehen nie ins Feld und haben als solche nur Türme. Dies ist eine WORK nur App, so dass unsere Systeme etwas kontrolliert werden. Wie in, keine USV auf Desktops und keine Laptop-CPU entweder.

Ich habe meine DAL eingerichtet, um basierend auf einer Einstellung zwischen lokalem SQL und dem zentralen SQL Server wechseln zu können. Ich möchte das automatisch basierend auf diesem System einstellen können.

Wenn ein Laptop dann sollte sie lokal zeigen, wenn ein Turm, zentral.

Hilft das? Ich habe es absichtlich vorher weggelassen, um die Antworten nicht zu verwirren. Ich entschuldige mich für Entschuldigungen, um das Gegenteil zu erreichen.

+7

Remotely ihre Webcam aktiviert, ein Bild von ihrem Auge nehmen, dann eine dieser Erweiterung Dienstprogramme ehrfürchtigen Bildes verwenden (wie man in den Fernsehsendungen die ganze Zeit sieht, weil ich sicher bin, dass sie wirklich existieren, sind sie im Fernsehen!), um den Computertyp anhand der Bildreflexion auf ihrer Pupille zu erkennen. Natürlich haben Sie eine erstaunliche Bilderkennungssoftware, die das automatisch macht, richtig? – Stewbob

+2

Was genau wollen Sie wissen, und warum möchten Sie es wissen? Wenn der Laptop acht CPUs und 32 GB RAM hätte, würdest du ihn als Laptop behandeln wollen? Wenn eine Workstation mit Batterien läuft, möchten Sie sie als Workstation behandeln? –

+1

Wie andere Leute darauf hingewiesen haben, ist dies eine trügerisch schwierige Frage zu beantworten. Vielleicht wäre es nützlich, wenn Sie mehr darüber erzählen würden, was Sie tatsächlich tun. Was wird Ihre Anwendung tun, hängt von der Art des verwendeten Computers ab? –

Antwort

13

Dies ist ein wirklich schwer zu lösendes Problem aufgrund der involvierten Randfälle. Ich weiß jetzt nicht, wie genau Sie für Ihre Anwendung sein müssen, aber hier ist eine zuverlässige Methode, um herauszufinden, ob sich der Benutzer auf einem stereotypen Laptop befindet.

Win32_Battery

Sie vielleicht einen Blick auf EstimatedRunTime nehmen wollen.

EstimatedRunTime

Data type: uint32 
Access type: Read-only 

Estimate in minutes of the time to battery charge depletion under the 

vorhanden Lastbedingungen, wenn der Strom ausgeschaltet ist oder verloren und bleibt ausgeschaltet, oder ein Laptop aus einer Stromquelle getrennt. Diese Eigenschaft ist geerbt von CIM_Battery.

Sie können auch prüfen wollen:

Win32_PortableBattery

Auch hier ist eine interessante Diskussion über ein ähnliches Problem und den Umgang mit UPS.

http://forum.bigfix.com/viewtopic.php?pid=19908

Im Einzelnen:

"Microsoft ACPI-Compliant Control Method Battery" 

Auch, wie in den Kommentaren erwähnt, werden Sie Benutzer auf einem Laptop eingesteckt in die Wand mit der Batterie getrennt zu betrachten haben.

+0

Kann ein Desktop eine Batterie (außer USV) verwenden? – JYelton

+1

@JYelton: Ich habe von keinem gehört; aber UPS verursacht eine Reihe von Fehlalarmen. Win 7 selbst ist von ihnen verwirrt. Wenn Sie zum Beispiel eine USV an einen Desktop angeschlossen haben, geht 7 davon aus, dass Sie mit Akkustrom arbeiten und Ihnen daher keine Windows-Erfahrungsindexnummern geben. – NotMe

+2

Ja, darüber habe ich nachgedacht. Die Randfälle könnten hier zu einigen falsch positiven/negativen Ergebnissen führen. Zum Beispiel, wenn der Benutzer einen Laptop verwendet, der an die Wand angeschlossen ist und die Batterie nicht angeschlossen ist. Nennen Sie es einen Laptop, weil der Typ bei Fry es gesagt hat? Oder zählst du es als Desktop, weil es so aktuell ist? Dies sind Designentscheidungen, die vor der Veröffentlichung der Anwendung entschieden werden müssen. –

3

die Art der Prozessor (see this question) Get:

System.Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE")

Wenn Sie es ist ein mobiler Prozessor bestimmen kann, haben Sie Ihre Antwort.

(Es ist erwähnenswert, dass WMI erhalten Sie bessere Informationen geben, wie in der Frage erklärt verknüpft I.)

+7

Obwohl es möglich ist, einen Desktop-Prozessor in einem Laptop zu bekommen. – Thomas

+6

... Und einige Leute verwenden Laptop-Prozessoren auf dem Desktop für geringeren Stromverbrauch. =) – Arkku

+2

Vielleicht muss die Definition von Laptop und Desktop erklärt werden, mit anderen Worten, will der OP den Prozessortyp oder den Chassis-Stil kennen? Wenn Letzteres, gibt es einfach keine Möglichkeit zu wissen! – JYelton

4

http://msdn.microsoft.com/en-us/library/Aa394474

dann schauen

ChassisTypes

Value Meaning 
1 Other 
2 Unknown 
3 Desktop 
4 Low Profile Desktop 
5 Pizza Box 
6 Mini Tower 
7 Tower 
8 Portable 
9 Laptop 
10 Notebook 
11 Hand Held 
12 Docking Station 
13 All in One 
14 Sub Notebook 
15 Space-Saving 
16 Lunch Box 
17 Main System Chassis 
18 Expansion Chassis 
19 SubChassis 
20 Bus Expansion Chassis 
21 Peripheral Chassis 
22 Storage Chassis 
+0

Ich wusste nicht, dass das existiert - ich bezweifle, dass es nützlich ist, wie würden diese Daten gefüllt werden? Ich habe Hunderte von Desktop-PCs gebaut und nie irgendeine Art von Chassis-Typ-Variable gesetzt. – JYelton

+0

Ich bin sicher, dass es für Desktops seltener wäre, sie zu bevölkern ... aber für Laptops? Da sie dazu neigen, OEM zu sein, würde ich denken, dass sie korrekt eingestellt wären. (vielleicht) –

+1

Aah, Pizza Box. Hatte einen dieser Formfaktoren. Ich bezweifle, dass dieser Wert oft genau oder nützlich ist. – Broam

0

Vielleicht können Sie nach Batterieinformationen abfragen?

Werfen Sie einen Blick auf this

1

Basierend auf Ihren aktualisierten Informationen, die ich habe ein paar Empfehlungen.

  1. Machen Sie es zu einer konfigurierbaren Option. Fragen Sie sie während der Installation oder beim ersten Lauf, was sie sind. Das wird viel genauer sein als Raten.

  2. Wenn Sie bereits Mergereplikation an Ort und Stelle haben ... Warum nicht alle als getrennte/Remote-Benutzer behandeln?

+0

** 1 - ** Es ist eine konfigurierbare Option, die ich beliebig wechseln kann. Das Problem ist, dass unsere Benutzer nicht vertrauenswürdig sind, dies entsprechend umzuschalten. ** 2 - ** Weil es sinnlos erscheint, sich zu einem Turm zu replizieren, der NIEMALS im Feld sein kann. Warum haben Sie die zusätzliche Komplexität und den Overhead? –

+0

"Warum extra Komplexität und OH?" Weil es das Richtige ist - GUESSING basierend auf der Hardware ist so ziemlich garantiert falsch und Sie werden das ursprüngliche Problem sowieso haben. Eine Entscheidung über den Hardwaretyp löst Ihr Problem nicht wirklich - zumindest nicht so, wie ich es verstehe. – Tim

1

Ich habe die folgende Batchdatei erfolgreich getestet, aber nur auf einige Computer:

@echo off 
reg query "HKLM\SYSTEM\CurrentControlSet\Enum\ACPI" /s | find "DeviceDesc" | find "ACPI Lid" > nul 
if errorlevel 1 (
    echo This computer IS NOT a laptop ^(no ^"ACPI Lid^" device found in Registry^) 
) else (
    echo This computer IS a laptop ^(^"ACPI Lid^" device found in Registry^) 
) 
echo. & pause