1

我知道无法在 Windows Store 应用程序中获取操作系统版本,请让我解释一下。

我的应用程序是使用 C# 编程的 Windows 应用商店应用程序。我的应用程序的某些功能依赖于另一个桌面应用程序(也许它不是一个好的设计)。据我所知,第三方桌面应用程序无法安装在 Windows RT 上,所以我只想知道我的应用程序是否在 Windows RT 上运行,并禁止我的应用程序在 Windows RT 上的某些功能。我不想使用 GetNativeSystemInfo(),因为它是一个 win32 API,如果我使用该 API,我的应用程序无法与任何 cpu 兼容。

4

3 回答 3

2

是的。就是这样!

Task<ProcessorArchitecture> WhatProcessor()
{
    var t = new TaskCompletionSource<ProcessorArchitecture>();
    var w = new WebView();
    w.AllowedScriptNotifyUris = WebView.AnyScriptNotifyUri;
    w.NavigateToString("<html />");
    NotifyEventHandler h = null;
    h = (s, e) =>
    {
        // http://blogs.msdn.com/b/ie/archive/2012/07/12/ie10-user-agent-string-update.aspx
        // IE10 on Windows RT: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0;)
        // 32-bit IE10 on 64-bit Windows: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)
        // 64-bit IE10 on 64-bit Windows: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)
        // 32-bit IE10 on 32-bit Windows: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0) 
        try
        {
            if (e.Value.Contains("ARM;"))
                t.SetResult(Windows.System.ProcessorArchitecture.Arm);
            else if (e.Value.Contains("WOW64;") || e.Value.Contains("Win64;") || e.Value.Contains("x64;"))
                t.SetResult(Windows.System.ProcessorArchitecture.X64);
            else
                t.SetResult(Windows.System.ProcessorArchitecture.X86);
        }
        catch (Exception ex) { t.SetException(ex); }
        finally { /* release */ w.ScriptNotify -= h; }
    };
    w.ScriptNotify += h;
    w.InvokeScript("execScript", new[] { "window.external.notify(navigator.userAgent); " });
    return t.Task;
}

祝你好运!

于 2013-06-08T04:50:16.143 回答
0

I don't know if this is really possible or not, but you can achieve result with "Conditional compilation symbols". For example you can add ARM only for ARM build, and build 3 separate packages: ARM, x86 and x64. You can find a lot of articles about how to use it. This is one of them Visual Studio: Use Conditional Compilation to Control Runtime Settings for Different Deployment Scenarios.

So you just need to set up for your project for ARM configuration special symbol ARM (like in this screenshot you see LIVE).

enter image description here

After this you can use C# directives: #if, #else, #endif to hide some portion of your code for ARM build.

于 2013-06-07T05:02:23.690 回答
0

由于您的应用程序的某些功能依赖于桌面应用程序(可能已安装或未安装),因此即使在 x86 版本的应用程序中,您也需要处理“未安装”状态。

我要做的是默认禁用所有这些功能,并在每次启动时检查桌面应用程序是否存在。只有当它存在时,我才会启用附加功能。

于 2013-06-07T07:37:48.573 回答