Festplatteninformationen als Benutzer auslesen

19/08/2009 - 17:10 von Armin Schaefer | Report spam
Hallo zusammen!

Ich habe eine Applikation geschrieben, die mir die Festplattenbezeichnung
und Seriennummer der ersten Festplatte ausliest und anzeigt. Dazu benutze
ich folgenden Code:

// Festplattenseriennummer
ManagementObjectSearcher searcher = new ManagementObjectSearcher("select *
from Win32_DiskDrive");
ManagementObjectCollection queryCollection = searcher.Get();

foreach (ManagementObject mo in queryCollection)
{
if (mo["DeviceID"].ToString() == @"\\.\PHYSICALDRIVE0")
{
MessageBox.Show("Modell: " + mo["Model"].ToString() + " SN: " +
mo["Signature"].ToString());
Festplatte = mo["Model"].ToString() + " SN: " +
mo["Signature"].ToString();
}
}

Làuft auch auf meinem Entwicklungsrechner mit Administratorrechten
einwandfrei. Leider funktioniert der Zugriff nicht mehr auf dem
Kundenerechner, der als Benutzer oder Hauptbenutzer arbeitet. Was für
Möglichkeiten habe ich, außer dem Benutzer zu sagen, dass er
Administratorrechte benötigt?

Ciao, Armin
 

Lesen sie die antworten

#1 Frank Dzaebel
20/08/2009 - 07:26 | Warnen spam
Hallo Armin,

Ich habe eine Applikation geschrieben, die mir die
Festplattenbezeichnung und Seriennummer der ersten Festplatte
ausliest und anzeigt. [...]
Làuft auch auf meinem Entwicklungsrechner mit Administratorrechten
einwandfrei. Leider funktioniert der Zugriff nicht mehr auf dem
Kundenerechner, der als Benutzer oder Hauptbenutzer arbeitet.



Was ja auch wirklich so unbedingt sein sollte!

Was für Möglichkeiten habe ich, außer dem Benutzer
zu sagen, dass er Administratorrechte benötigt?



Wenn Du Usernamen und Passwörter kennst ggf.
zur Laufzeit impersonifizieren:

[Code mit anderen Rechten ausführen]
http://dzaebel.net/LogonUser.htm

Dann sollte die App ab Vista evtl. im "requestedExecutionLevel"
Element des Manifestes ein "requireAdministrator"
stehen haben. Bzw. auf Knopfdruck:

void StarteProzessElevated()
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.UseShellExecute = true;
startInfo.WorkingDirectory = DeinVerzeichnis;
startInfo.FileName = @"DeinExePfad";
// wenn der andere Prozess kein Manifest hat ..
// startInfo.Verb = "runas";

startInfo.ErrorDialog = true;
startInfo.ErrorDialogParentHandle = this.Handle;

// startInfo.UserName = "GewünschterUser";
// startInfo.Password = "pwd";

try
{
Process p = Process.Start(startInfo); //Beispiel
p.WaitForExit();
}
catch(Exception exp)
{
// Benutzer bricht ab
MessageBox.Show(exp.Message); // als Beispiel
return;
}
}
_________

Nett sind auch Möglichkeiten über den TaskScheduler,
bei dem ja die Credentials fest eingetragen werden
können. Damit làuft der Prozess immer unter diesem Account.


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen