我的程序需要在 XP 兼容模式下运行。我需要一种方法来检查是否在 XP 兼容模式下运行。如果不告诉用户以兼容模式运行它。我已经搜索但没有找到答案。我已经尝试过了,this.Text = System.Environment.OSVersion.VersionString;
但它返回的是 Microsoft Windows NT 6.1.7601 Service Pack 1 而不是模拟的 XP。
(编辑)
在更多的搜索和 dll 导入之后,它总是会返回 Microsoft Windows NT 6.1.7601 Service Pack 1。所以我创建了一个加载控制台来处理注册表,然后运行我的程序。
using System;
using System.Security.Permissions;
using Microsoft.Win32;
[assembly: RegistryPermissionAttribute(SecurityAction.RequestMinimum, ViewAndModify = "HKEY_CURRENT_USER")]
class RegKey
{
static void Main()
{
int Major = Environment.OSVersion.Version.Major;
int Minor = Environment.OSVersion.Version.Minor;
if (Major == 5 && Minor == 1)
{
System.Diagnostics.Process.Start(System.IO.Directory.GetCurrentDirectory() + "\\MyApp.exe");
}
else if (Major > 5)
{
if (System.IO.File.Exists(System.IO.Directory.GetCurrentDirectory() + "\\MyApp.exe"))
{
RegistryKey Rkey = Registry.CurrentUser.CreateSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers");
//Creates Name And Value
Rkey.SetValue(System.IO.Directory.GetCurrentDirectory() + "\\MyApp.exe", "WINXPSP3");
//Starts App.
System.Diagnostics.Process.Start(System.IO.Directory.GetCurrentDirectory() + "\\MyApp.exe", "Load");
//Waites 500 milliseconds so my program can get the registry info
//(Not needed any more)
//System.Threading.Thread.Sleep(500);
//Deletes Name And Value
//(Handled by MyApp.exe to increase load time)
//Rkey.DeleteValue(System.IO.Directory.GetCurrentDirectory() + "\\MyApp.exe");
}
else
{
Console.WriteLine("File Not Found!!!");
Console.WriteLine("( MyApp.exe ) Must Be In Same Directory As The Loader.exe.");
Console.ReadLine();
}
}
}
}
我以这种方式处理注册表,因此我的程序可以移植并防止注册表项指向任何内容。我支持他们是获得我正在寻找的结果的更好方法。
(编辑 2)
经过更多检查后,我只需要在 64 位系统上运行 XP 兼容模式。32 位系统不需要在 XP 兼容模式下运行。我用平台 x86 编译了我的应用程序。所以这一定与64位系统读取注册表的方式有关。