CPU Identification on Virtual Machine - c#

I use following c# code to get processor information. The Management class is null if I run my application on a virtual machine. I use Oracle VM VirtualBox as my virtual pc (Windows XP SP3)
System.Management.ManagementClass Management = new System.Management.ManagementClass("Win32_Processor");
Does anyone has experience about using such code and has problems in virtual machines.

Oracle VirtualBox does not provide such information.
Here is the related ticket.
https://www.virtualbox.org/ticket/9046

Are you using GetInstances?
System.Management.ManagementClass ManagementClass1 = new System.Management.ManagementClass("Win32_Processor");
System.Management.ManagementObjectCollection ManagementObjectCollection1 = ManagementClass1.GetInstances();
foreach (System.Management.ManagementObject managementobject in ManagementObjectCollection1) {
Console.Out.WriteLine(managementobject.Properties["Name"].Value);
}
Console.In.ReadLine();

Related

Environment.OSVersion sometimes reporting Windows 8 for 8.1, although manifest is set correctly

Since Environment.OSVersion may lie about whether Win 8 or 8.1 is running, we declared in our manifest specifically that we target Windows 8.1 in our application.
However, Environment.OSVersion.Minor seems to be unreliable in returning the version. We wrapped it in one of our libraries, but on some of our dev machines, it returns "2" (Windows 8), on other "3" (Windows 8.1). There aren't any specific compatibility settings applied (as far as we know), but we can't seem to track the issue down.
Are there other options to get the Windows version via .Net, without using the Win32 API functions mentioned at MSDN?
Allright, I did it with WMI as #mike-z suggested:
SelectQuery query = new SelectQuery(#"Select * from Win32_OperatingSystem");
string wmiVersion = String.Empty;
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
{
foreach (var process in searcher.Get())
{
wmiVersion = process["Version"].ToString().Substring(0, 3);
}
}
switch (wmiVersion)
{
case "6.3": return "Windows 8.1";
// ...
}
Disclaimer: this is meant as a "when everything else fails..." kind of answer
You could parse the output of VER and see if it's accurate.
On my box (8.1 Pro) I see this
C:> ver
Microsoft Windows [Version 6.3.9600]
C:>

Microsoft App-V and Hardware IDs

I am currently working on a software solution written in C# .NET 4.5. The software uses a licensing system that is based on hardware IDs (for example MAC address or CPU ID).
One user now reported that he has issues with the licensing when using the software with Microsoft App-V. He mentioned that every time a new User wants to use the software the application complains that the license is not valid (due to a change in the hardware).
This also happens if a previously registered user uses the Software on a different client.
My question now is, when running an application via App-V, what does the following snipped of code return, the Mac address of the client or of the server where to application is actually running. If the first is true, is there a way to get the same information from the server too, using some functionality in .NET?
private static string getMAC() {
ManagementClass oMClass = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection MOCol = oMClass.GetInstances();
string mac = "";
foreach (ManagementObject MO in MOCol) {
if (MO != null) {
if (MO["MacAddress"] != null) {
mac = MO["MacAddress"].ToString().Replace(":", "");
if (mac != string.Empty) {
break;
}
}
}
return mac;
}
Next-to-last bullet in the Limitations section in App-V's Wikipedia article fits your problem exactly:
Licensing Policies: Applications with licensing enforcement tied to the machine, e.g. the license is tied to the system’s MAC address or harddisk serial number. This type of application should not be sequenced if the activation can not be done by the user at the first launch of sequenced application, manually or by script.
You'll need to tell your customer that you cannot support App-V if you verify the license on each individual run of the app instead of just once at app install time. If that means that you'll lose a valuable customer then quickly get rid of this scheme, a business decision we cannot make for you.

How to get all network printers in asp.net 4.0

Please any one help me to get all network printers.
I get all printers installed in the local machine using "System.Drawing.Printing.PrinterSettings.InstalledPrinters".
But I can't get the printers which are in the Network.
I try with "ManagementObjectSearcher" but I can't access this class.
I think it does not support in framework 4.0.
I'm using ASP.NET 4.0, C#. Any help will be greatly appreciated.
Thanks
Singaravelu.R.
if you cannot find/reference the ManagementObjectSearcher Class probably is because you did not add the proper reference to: System.Management.dll to your C# project. Surely it is supported also by .NET 4.
as you can see in this question: ManagementObjectSearcher select network printers? you can find all network printers in this way:
var searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_Printer");
var results = searcher.Get();
IList<ManagementBaseObject> printers = new List<ManagementBaseObject>();
foreach (var printer in results) {
if ((bool)printer["Network"]) {
printers.Add(printer);
}
}

How to get the name of OS in which the code is running using C#?

I have a C# application which is expected to run in both WIn 7 & Win XP. I need to check the OS NAME in my C# source code before distributing the MSI & EXE to customers.
Without getting into finer versioning
details my code wants to check if it
is a 32 bit WINDOWS XP or a 64-bit
WINDOWS 7.
Can I kindly get help regarding this.
OS under consideration is 64-bit Win7 & 32-bit Win XP.
You could get the Operating System 's friendly name by using WMI.
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT Caption FROM Win32_OperatingSystem");
String operatingSystem = String.Empty;
foreach (ManagementObject query in searcher.Get())
{
operatingSystem = query["Caption"].ToString();
break;
}
You could use WMI Code Creator, a great tool from Microsoft to generate WMI queries.
You should be able to get all the information you need from the Environment class, specifically, the OSVersion and Is64BitOperatingSystem properties.
Yes all give you right direction Environment.OSVersion gives you OS version, but how to know if its windows XP or 7
You need to compare for versions, here is concerned list
Windows XP 5.1.2600 Current SP3
Windows XP Professional x64 Edition 5.2.3790
Windows Vista 6.0.6000 Current Version changed to 6.0.6002 with SP2
Windows 7 6.1.7600
More Windows OS Version Numbers
if (Environment.OSVersion.Version.ToString().Equals("5.1.2600"))
{
// windows xp 32-Bit with service pack 3
}
else if (Environment.OSVersion.Version.ToString().Equals(" 6.1.7600"))
{
// windows 7
}
Have a look on the System.Environment.OSVersion property. It is of type OperatingSystem which should contain all relevant information.
You should check out Environment.OSVersion and Environment.Is64BitOperatingSystem.
Though you'll need to manually map the returned information to an appropriate string.
Take a look at the Environment class. It contains methods for what you need.
Short Answer:
Console.WriteLine("OSVersion: {0}", Environment.OSVersion.ToString());
You can get the OS Name from registry.
string productName = Registry.GetValue(#"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "ProductName", "").ToString();
Console.WriteLine(productName);
Output:
//For my windows 10 i got
Windows 10 Enterprise
Try this for getting the Windows product name

How to programmatically get sites list and virtual dirs in IIS 7?

Does anybody know how to programmatically get the sites list and virtual dirs in IIS 7?
Check out this post - seems to be a brand-spanking new management API in the Microsoft.Web.Administration namespace:
http://blogs.msdn.com/carlosag/archive/2006/04/17/MicrosoftWebAdministration.aspx
Here's a quick graphical overview from that blog post:
And here's a "The Gu" post on Cool new IIS7 Features and APIs
Something like this will find all the sites, their application and their virtual directories in your IIS7 server:
static void Main(string[] args)
{
ServerManager mgr = new ServerManager();
foreach(Site s in mgr.Sites)
{
Console.WriteLine("Site {0}", s.Name);
foreach(Application app in s.Applications)
{
Console.WriteLine("\tApplication: {0}", app.Path);
foreach(VirtualDirectory virtDir in app.VirtualDirectories)
{
Console.WriteLine("\t\tVirtual Dir: {0}", virtDir.Path);
}
}
}
Console.ReadLine();
}
One important caveat to using the Microsoft.Web.Administration assembly is the code has to be running on a machine that has IIS7 installed.
When I was developing a system to load IIS7 sites into a webpage on my windows XP machine I discovered this limitation. The API is great, I just wished I could have used it.
Control IIS 7 server from Windows 2003 server programmatically

Categories

Resources