C# 有没有办法阻止我的应用程序在Windows 7机器上运行?

C# 有没有办法阻止我的应用程序在Windows 7机器上运行?,c#,windows,visual-studio-2010,C#,Windows,Visual Studio 2010,正如标题中所建议的,我在使用windows XP的机器上,在Visual Express 2010上创建了一个应用程序(windows窗体)。我在一台运行Windows7的机器上测试了这个应用程序,按钮和控件的格式变化破坏了应用程序的整体外观 有没有办法阻止我的应用程序在Windows 7计算机上运行 另一种选择是检查用户使用的操作系统,并根据此更改按钮/控件等的对齐/位置 最好的方法是什么 提前感谢您的回答。您可以使用,但最好的方法是让您的应用程序在Windows 7上运行并正确显示,您不会真

正如标题中所建议的,我在使用windows XP的机器上,在Visual Express 2010上创建了一个应用程序(windows窗体)。我在一台运行Windows7的机器上测试了这个应用程序,按钮和控件的格式变化破坏了应用程序的整体外观

有没有办法阻止我的应用程序在Windows 7计算机上运行

另一种选择是检查用户使用的操作系统,并根据此更改按钮/控件等的对齐/位置

最好的方法是什么


提前感谢您的回答。

您可以使用,但最好的方法是让您的应用程序在Windows 7上运行并正确显示,您不会真的想失去拥有Windows 7的客户端(尤其是现在使用最多的Windows版本)

只需检查您的应用程序运行的操作系统版本,如果您的程序在windows 7上运行,请退出该程序,例如

if (Environment.OSVersion.ToString().Contains("Microsoft Windows NT 6.1"))
{
    //code to execute if running win 7
}

几乎可以肯定的是,您错误地确定了问题的根源。到目前为止,表单布局损坏的最常见原因是视频适配器的DPI设置。它决定每英寸的像素数,在Windows7上很容易更改。它也可以在XP上更改,但这样做比较困难。设置是一件大事,显示器正在变得更好,尤其是随着苹果公司推出“视网膜”显示器

通过在Program.cs中调整Main()方法添加检查代码。让它看起来像这样:

    [STAThread]
    static void Main() {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        var main = new Form1();
        using (var gr = main.CreateGraphics()) {
            if (gr.DpiX != 96) {
                MessageBox.Show("Sorry, didn't get this done yet.  Bye");
                Environment.Exit(1);
            }
        }
        Application.Run(main);
    }
修复表单布局当然是长期的解决方案。标准的错误是给控件自己的字体属性与窗体的字体属性或其容器的字体属性不匹配。在XP机器上触发相同问题的简单方法是模拟DPI设置的作用。省去了在XP上查找设置和更改时重新启动机器的麻烦。将此代码粘贴到表单中:

    protected override void OnLoad(EventArgs e) {
        this.Font = new Font(this.Font.FontFamily, this.Font.SizeInPoints * 120f / 96f);
        base.OnLoad(e);
    }

这相当于在Win7显示首选项中选择125%缩放。

是什么让您认为您的应用程序在所有WinXP系统上看起来都一样,而不管主题设置如何?如果完全相同的问题在XP上无法重现(可能是通过安装第三方主题),我会感到非常惊讶。你真的只想让操作系统(半)过时的人运行你的程序吗?@MatthewWatson基于这个问题,Windows 8可以。:)最好的方法是使UI操作系统独立。第二个最好的方法是在Windows7上修复它。现在支持XP已经没有意义了。这是一个专门为一组只运行XP电脑的特定用户开发的应用程序(如果由我决定,他们就不会运行XP,相信我:)。在某个时候,他们的机器会升级到Windows7,然后我会在Windows7上做一个应用程序的“端口”,这样它在Windows7中看起来也正常。正如我所说,这只是设计和外观的问题。非常感谢你的回答,山姆!我想我会检查一下,然后改变按钮/控件等的位置。欢迎光临。您可以尝试使用WPF,它考虑了dpi。谢谢您,Hans,我会尝试这样做。