ASP.NET Site Error on Different Server - c#

I have a a project that have been deployed on a server. Everything is okay ( I can access it using multiple browser) But different case with IE 11.
What make it weird is, I can access my localhost using IE 11 which build on the same project, but once I deploy it, my IE 11 doesnt allow me to login and redirect me to error page, also the link are broken (other browser include IE 9 are fine).
I use IE 11.0.9, Windows 7, and .Net Framework 4 on my Lcoal and
on my server I use Windows Server R2 Data Center and .Net framework 4 too.
What I did so far is:
Copy paste my ie.browser file on .Net config directory (local) to server, (C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config)
run aspnet_regbrowsers -i
Restart IIS.
Here's my ie.browser that exist on my pc (local)
<browsers>
<browser id="IE" parentID="Mozilla">
<identification>
<userAgent match="MSIE (?'version'(?'major'\d+)(\.(?'minor'\d+)?)(?'letters'\w*))(?'extra'[^)]*)" />
<userAgent nonMatch="IEMobile" />
</identification>
<capture>
<userAgent match="Trident/(?'layoutVersion'\d+)" />
</capture>
<capabilities>
<capability name="browser" value="IE" />
<capability name="layoutEngine" value="Trident" />
<capability name="layoutEngineVersion" value="${layoutVersion}" />
<capability name="extra" value="${extra}" />
<capability name="isColor" value="true" />
<capability name="letters" value="${letters}" />
<capability name="majorversion" value="${major}" />
<capability name="minorversion" value="${minor}" />
<capability name="screenBitDepth" value="8" />
<capability name="type" value="IE${major}" />
<capability name="version" value="${version}" />
</capabilities>
</browser>
<!-- Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4325) -->
<browser id="IE6to9" parentID="IE">
<identification>
<capability name="majorversion" match="[6-9]" />
</identification>
<capabilities>
<capability name="ecmascriptversion" value="3.0" />
<capability name="jscriptversion" value="5.6" />
<capability name="javascript" value="true" />
<capability name="javascriptversion" value="1.5" />
<capability name="msdomversion" value="${majorversion}.${minorversion}" />
<capability name="w3cdomversion" value="1.0" />
<capability name="ExchangeOmaSupported" value="true" />
<capability name="activexcontrols" value="true" />
<capability name="backgroundsounds" value="true" />
<capability name="cookies" value="true" />
<capability name="frames" value="true" />
<capability name="javaapplets" value="true" />
<capability name="supportsCallback" value="true" />
<capability name="supportsFileUpload" value="true" />
<capability name="supportsMultilineTextBoxDisplay" value="true" />
<capability name="supportsMaintainScrollPositionOnPostback" value="true" />
<capability name="supportsVCard" value="true" />
<capability name="supportsXmlHttp" value="true" />
<capability name="tables" value="true" />
<capability name="supportsAccessKeyAttribute" value="true" />
<capability name="tagwriter" value="System.Web.UI.HtmlTextWriter" />
<capability name="vbscript" value="true" />
</capabilities>
</browser>
<!-- Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0;) -->
<browser id="IE7" parentID="IE6to9">
<identification>
<capability name="majorversion" match="7" />
</identification>
<capabilities>
<capability name="jscriptversion" value="5.7" />
</capabilities>
</browser>
<!-- Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729) -->
<browser id="IE8" parentID="IE6to9">
<identification>
<capability name="majorversion" match="8" />
</identification>
<capabilities>
<capability name="jscriptversion" value="6.0" />
</capabilities>
</browser>
<gateway id="IEbeta" parentID="IE">
<identification>
<capability name="letters" match="^([bB]|ab)" />
</identification>
<capture>
</capture>
<capabilities>
<capability name="beta" value="true" />
</capabilities>
</gateway>
</browsers>
Still not working though.
Does anyone have a better approach to this case.
Update: I found error in:
WebForm_DoPostBackWithOptions is undefined

Your IE detection doesn't work properly for IE11, which doesn't have the MSIE token. See http://blogs.msdn.com/b/ieinternals/archive/2013/09/21/internet-explorer-11-user-agent-string-ua-string-sniffing-compatibility-with-gecko-webkit.aspx for the ASP.NET updates that will properly detect IE11 and allow ASP.NET to send JavaScript to the client.
(You probably need to remove your custom IE browser definition file)

Related

NET MAUI Azure AD authenticate for enrolled device

We have developed a .NET MAUI application that uses Azure AD authentication as the app will only be used internally. We use to have a Xamarin Forms application for this but due to the technology stack being old and will deprecated in the future we thought it good to rewrite it now.
I am experiencing issues now with my app on enrolled devices. The Azure AD authentication works fine on my device and devices that have a work profile but not on dedicated devices. Whenever I want to log in the app crashes with no error.
Is there anyone that can assist? Is there something that I am missing specifically for enrolled devices?
I finally got the exception that causes the app to crash.
Microsoft.Identity.Client.MsalClientException: 'The Activity cannot be found to launch the given Intent. To ensure authentication, a browser with custom tab support is recommended. See https://aka.ms/msal-net-system-browsers for more details on using system browser on Android.'
I have added all of the following parts to the Android Manifest file.
<application android:allowBackup="true" android:icon="#mipmap/appicon" android:roundIcon="#mipmap/appicon_round" android:supportsRtl="true" android:usesCleartextTraffic="true">
<activity android:name="microsoft.identity.client.BrowserTabActivity" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="msal4d5a943e-5e1e-4a3b-b891-a8cae0d9e274" android:host="auth" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="msauth" android:host="com.companyname.gobid.qa.AssetPhotos.Maui" android:path="/iWWmgfpHhBWFUgBzKb4n5CEEgm4=" />
</intent-filter>
</activity>
<receiver android:name="crc6479a315bcfb879781.BootReceiver" android:exported="false"/>
<activity android:name="crc6479a315bcfb879781.MainActivity_MsalActivity" android:exported="false"/>
</application>
and
<queries>
<package android:name="com.azure.authenticator" />
<package android:name="com.companyname.gobid.qa.AssetPhotos.Maui" />
<package android:name="com.microsoft.windowsintune.companyportal" />
<package android:name="com.mediatek.camera" />
<intent>
<action android:name="android.media.action.IMAGE_CAPTURE" />
</intent>
<intent>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" />
</intent>
<intent>
<action android:name="android.intent.action.MAIN" />
</intent>
<intent>
<action android:name="android.support.customtabs.action.CustomTabsService" />
</intent>
</queries>
but I still get the exception mentioned above.

UWP C# FullTrustProcess

I'm new to UWP app and after 2 days of research I come to you…
I'm trying to run an executable from an uwp app so I looked at FullTrustProcess.
I added "Windows Desktop Extension for the UWP" to my references, my exe is in "Assets" folder and my manifest looks like this
<?xml version="1.0" encoding="utf-8"?>
<Package
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10"
IgnorableNamespaces="uap mp rescap desktop">
<Identity
Name="22c57925-bd2a-4ebf-97e9-7a860ef17b3c"
Publisher="CN=charl"
Version="1.0.0.0" />
<mp:PhoneIdentity PhoneProductId="22c57925-bd2a-4ebf-97e9-7a860ef17b3c" PhonePublisherId="00000000-0000-0000-0000-000000000000"/>
<Properties>
<DisplayName>CustomCortanaCommands</DisplayName>
<PublisherDisplayName>charl</PublisherDisplayName>
<Logo>Assets\StoreLogo.png</Logo>
</Properties>
<Dependencies>
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.14393.0" MaxVersionTested="10.0.14393.0" />
</Dependencies>
<Resources>
<Resource Language="x-generate"/>
</Resources>
<Capabilities>
<Capability Name="internetClient" />
<rescap:Capability Name="runFullTrust" />
</Capabilities>
<Applications>
<Application Id="App"
Executable="$targetnametoken$.exe"
EntryPoint="CustomCortanaCommands.App">
<uap:VisualElements
DisplayName="CustomCortanaCommands"
Square150x150Logo="Assets\Square150x150Logo.png"
Square44x44Logo="Assets\Square44x44Logo.png"
Description="CustomCortanaCommands"
BackgroundColor="transparent">
<uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png"/>
<uap:SplashScreen Image="Assets\SplashScreen.png" />
</uap:VisualElements>
<Extensions>
<desktop:Extension Category="windows.fullTrustProcess" Executable="Assets\shutdown.exe">
<desktop:FullTrustProcess>
<desktop:ParameterGroup GroupId="SyncGroup" Parameters="/Sync"/>
<desktop:ParameterGroup GroupId="OtherGroup" Parameters="/Other"/>
</desktop:FullTrustProcess>
</desktop:Extension>
</Extensions>
</Application>
</Applications>
</Package>
Visual Studio keep telling me that this command does not exist in the current namespace
await FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync();
What i'm doing wrong ?? Please help me, it's frustrating to try to run an exe for 2 days...

GetFilesAsync() returns 0

I need the app to be able to list jpg files from folder "Photos".
I am stuck on reading jpg files from sd card on windows phone device.
What is done in order to resolve the problem:
created function to read files into collection. The function was
taken from basic sample called "RouteMapper"
ListBox to holding the list of files
permission to use sd card and jpg files
Function:
Photos = new ObservableCollection<ExternalStorageFile>();
private async void scanExternalStorage_Run()
{
// Clear the collection bound to the page.
Photos.Clear();
// Connect to the current SD card.
ExternalStorageDevice _sdCard = (await ExternalStorage.GetExternalStorageDevicesAsync()).FirstOrDefault();
// If the SD card is present, add GPX files to the Routes collection.
if (_sdCard != null)
{
try
{
// Look for a folder on the SD card named Routes.
ExternalStorageFolder photosFolder = await _sdCard.GetFolderAsync("Photos");
// Get all files from the Routes folder.
IEnumerable<ExternalStorageFile> photosFiles = await photosFolder.GetFilesAsync();
// Add each GPX file to the Routes collection.
foreach (ExternalStorageFile esf in photosFiles)
{
if (esf.Path.EndsWith(".jpg"))
{
Photos.Add(esf);
}
}
}
catch (FileNotFoundException)
{
// No Routes folder is present.
MessageBox.Show("The Routes folder is missing on your SD card. Add a Routes folder containing at least one .GPX file and try again.");
}
}
else
{
// No SD card is present.
MessageBox.Show("The SD card is mssing. Insert an SD card that has a Routes folder containing at least one .GPX file and try again.");
}
}
ListBox:
<ListBox
x:Name="jpgFilesListBox"
ItemsSource="{Binding Photos}"
SelectionChanged="jpgFilesListBox_SelectionChanged"
>
<!-- Each ListBox item is bound to the name of each GPX file -->
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock
Margin="0, 12, 0, 0"
Text="{Binding Name}"
Style="{StaticResource PhoneTextTitle2Style}"
/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
WMAppManifest.xml:
<Capabilities>
<Capability Name="ID_CAP_NETWORKING" />
<Capability Name="ID_CAP_MEDIALIB_AUDIO" />
<Capability Name="ID_CAP_MEDIALIB_PLAYBACK" />
<Capability Name="ID_CAP_SENSORS" />
<Capability Name="ID_CAP_WEBBROWSERCOMPONENT" />
<Capability Name="ID_CAP_REMOVABLE_STORAGE" />
<Capability Name="ID_CAP_MAP" />
</Capabilities>
<Extensions>
<FileTypeAssociation TaskID="_default" Name="JPG" NavUriFragment="fileToken=%s">
<SupportedFileTypes>
<FileType ContentType="application/jpg">.jpg</FileType>
</SupportedFileTypes>
</FileTypeAssociation>
</Extensions>
Debugging revealed photosFolder.GetFilesAsync() returns 0.
While I definately have files in the "Photos" folder.
RouteMapper works fine and returns list of gpx files.
PS: I use emulator 8.1
Update: just for information. GetFolderAsync works and returns object that contains "D:\Photos"
Update2: Adding manifest files. I've got two of them after creating clean Windows Phone SilverLight blank App.
WMAppManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<Deployment xmlns="http://schemas.microsoft.com/windowsphone/2014/deployment" AppPlatformVersion="8.1">
<DefaultLanguage xmlns="" code="en-US" />
<App xmlns="" ProductID="{dc1cb15e-1c8d-4635-a85e-e414e89455fb}" Title="CameraGPS" RuntimeType="Silverlight" Version="1.0.0.0" Genre="apps.normal" Author="CameraGPS author" Description="Sample description" SDOptOut="false" BackUpOptOut="false" Publisher="CameraGPS" PublisherID="{4d13b339-1a9f-4a55-ba44-fe10cf0c0420}">
<IconPath IsRelative="true" IsResource="false">Assets\ApplicationIcon.png</IconPath>
<Capabilities>
<Capability Name="ID_CAP_NETWORKING" />
<Capability Name="ID_CAP_MEDIALIB_AUDIO" />
<Capability Name="ID_CAP_MEDIALIB_PLAYBACK" />
<Capability Name="ID_CAP_SENSORS" />
<Capability Name="ID_CAP_WEBBROWSERCOMPONENT" />
<Capability Name="ID_CAP_REMOVABLE_STORAGE" />
<Capability Name="ID_CAP_MAP" />
<Capability Name="ID_CAP_MEDIALIB_PHOTO" />
</Capabilities>
<Tasks>
<DefaultTask Name="_default" NavigationPage="MainPage.xaml" ActivationPolicy="Resume" />
</Tasks>
<Tokens>
<PrimaryToken TokenID="CameraGPSToken" TaskName="_default">
<TemplateFlip>
<SmallImageURI IsRelative="true" IsResource="false">Assets\Tiles\FlipCycleTileSmall.png</SmallImageURI>
<Count>0</Count>
<BackgroundImageURI IsRelative="true" IsResource="false">Assets\Tiles\FlipCycleTileMedium.png</BackgroundImageURI>
<Title>CameraGPS</Title>
<BackContent>
</BackContent>
<BackBackgroundImageURI>
</BackBackgroundImageURI>
<BackTitle>
</BackTitle>
<DeviceLockImageURI>
</DeviceLockImageURI>
<HasLarge>
</HasLarge>
</TemplateFlip>
</PrimaryToken>
</Tokens>
<Extensions>
<FileTypeAssociation TaskID="_default" Name="jpg" NavUriFragment="fileToken=%s">
<SupportedFileTypes>
<FileType ContentType="image/jpg">.jpg</FileType>
</SupportedFileTypes>
</FileTypeAssociation>
</Extensions>
<ScreenResolutions>
<ScreenResolution Name="ID_RESOLUTION_WVGA" />
<ScreenResolution Name="ID_RESOLUTION_WXGA" />
<ScreenResolution Name="ID_RESOLUTION_HD720P" />
</ScreenResolutions>
</App>
</Deployment>
Package.appxmanifest:
<?xml version="1.0" encoding="utf-8"?>
<Package xmlns="http://schemas.microsoft.com/appx/2010/manifest" xmlns:m2="http://schemas.microsoft.com/appx/2013/manifest" xmlns:m3="http://schemas.microsoft.com/appx/2014/manifest" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest">
<Identity Name="5b897434-732a-4f41-a110-db75375561c9" Publisher="CN=Qet" Version="1.0.0.0" />
<mp:PhoneIdentity PhoneProductId="dc1cb15e-1c8d-4635-a85e-e414e89455fb" PhonePublisherId="4d13b339-1a9f-4a55-ba44-fe10cf0c0420" />
<Properties>
<DisplayName>CameraGPS</DisplayName>
<PublisherDisplayName>Qet</PublisherDisplayName>
<Logo>Assets\StoreLogo.png</Logo>
</Properties>
<Prerequisites>
<OSMinVersion>6.3.1</OSMinVersion>
<OSMaxVersionTested>6.3.1</OSMaxVersionTested>
</Prerequisites>
<Resources>
<Resource Language="x-generate" />
</Resources>
<Applications>
<Application Id="App" Executable="AGHost.exe" EntryPoint="MainPage.xaml">
<m3:VisualElements DisplayName="CameraGPS" Square150x150Logo="Assets\SquareTile150x150.png" Square44x44Logo="Assets\Logo.png" Description="CameraGPS" ForegroundText="light" BackgroundColor="#464646">
<m3:DefaultTile Square71x71Logo="Assets\SquareTile71x71.png">
</m3:DefaultTile>
<m3:SplashScreen Image="Assets\SplashScreen.png" />
</m3:VisualElements>
<Extensions>
<Extension Category="windows.fileTypeAssociation">
<FileTypeAssociation Name="jpg">
<DisplayName>Jpg</DisplayName>
<SupportedFileTypes>
<FileType ContentType="image/jpg">.jpg</FileType>
</SupportedFileTypes>
</FileTypeAssociation>
</Extension>
<Extension Category="windows.accountPictureProvider" />
<Extension Category="windows.backgroundTasks" EntryPoint="AgHost.BackgroundTask">
<BackgroundTasks>
<Task Type="systemEvent" />
<m2:Task Type="location" />
</BackgroundTasks>
</Extension>
</Extensions>
</Application>
</Applications>
<Capabilities>
<Capability Name="removableStorage" />
<Capability Name="picturesLibrary" />
<DeviceCapability Name="location" />
<DeviceCapability Name="webcam" />
</Capabilities>
<Extensions>
<Extension Category="windows.activatableClass.inProcessServer">
<InProcessServer>
<Path>AgHostSvcs.dll</Path>
<ActivatableClass ActivatableClassId="AgHost.BackgroundTask" ThreadingModel="both" />
</InProcessServer>
</Extension>
</Extensions>
</Package>

How to get permission to rename a StorageFile on the Desktop

I want my code to rename files on my Desktop, but I do not have permission to edit files on my Desktop. How do I get the necessary permission?
My code:
public async Task RenameFile(fileLocation, newName)
{
try
{
StorageFile bkpFile = await StorageFile.GetFileFromPathAsync(fileLocation);
await bkpFile.RenameAsync(newName);
}
catch { /* Eat error */ }
}
Permissions set in my Package.Appxmanifest file:
<Capabilities>
<Capability Name="picturesLibrary" />
<Capability Name="documentsLibrary" />
<Capability Name="internetClient" />
<Capability Name="removableStorage" />
<Capability Name="enterpriseAuthentication" />
<Capability Name="videosLibrary" />
<Capability Name="privateNetworkClientServer" />
<DeviceCapability Name="location" />
<DeviceCapability Name="webcam" />
<DeviceCapability Name="microphone" />
<m2:DeviceCapability Name="bluetooth.rfcomm">
<m2:Device Id="any">
<m2:Function Type="name:serialPort" />
</m2:Device>
</m2:DeviceCapability>
</Capabilities>
EDIT: I also need permission to rename files in attached devices, such as SD cards and thumb drives.

Check in a website if an App is installed on tablet

Is it possible to check for the existence of an app on a mobile device from a website?
Currently I am developing a website in C# that has to have the ability to choose whether to open the concerned app or to install it.
(I am assuming ASP.NET here as you didn't specify.)
Yes you can if the tablet sends the correct user agent string.
I have attached my current platform.browser file but this may have inaccuracies. The content is placed in the App_Browsers ASP.NET folder. The reason for the patch file is Microsoft's isn't always up-to date and have some missing information.
Android is a problem but v3 is tablet only 4 may not be and I haven't had time to correct this further.
To access this information use Request.Browser.Platform and Request.Browser.Version
<browsers>
<gateway id="PlatformWindowsPhone" parentID="Platform">
<identification>
<userAgent match="Windows Phone" />
</identification>
<capabilities>
<capability name="platform" value="Windows Phone" />
</capabilities>
</gateway>
<gateway id="PlatformIE11" parentID="PlatformWinnt">
<identification>
<userAgent match="Trident/7.0" />
<userAgent match="rv:11.0" />
</identification>
<capabilities>
<capability name="browser" value="IE" />
<capability name="version" value="11.0" />
</capabilities>
</gateway>
<gateway id="PlatformiPad" parentID="Platform">
<identification>
<userAgent match="iPad" />
</identification>
<capabilities>
<capability name="platform" value="iPad" />
</capabilities>
</gateway>
<gateway id="PlatformiPhone" parentID="Platform">
<identification>
<userAgent match="iPhone" />
</identification>
<capabilities>
<capability name="platform" value="iPhone" />
</capabilities>
</gateway>
<gateway id="PlatformAndroid" parentID="Platform">
<identification>
<userAgent match="Android" />
</identification>
<capabilities>
<capability name="platform" value="Android" />
</capabilities>
</gateway>
<gateway id="PlatformAndroid50" parentID="Platform">
<identification>
<userAgent match="Android 5\.0" />
</identification>
<capabilities>
<capability name="version" value="5.0" />
</capabilities>
</gateway>
<gateway id="PlatformAndroid45" parentID="Platform">
<identification>
<userAgent match="Android 4\.5" />
</identification>
<capabilities>
<capability name="version" value="4.5" />
</capabilities>
</gateway>
<gateway id="PlatformAndroid44" parentID="Platform">
<identification>
<userAgent match="Android 4\.4" />
</identification>
<capabilities>
<capability name="version" value="4.4" />
</capabilities>
</gateway>
<gateway id="PlatformAndroid43" parentID="Platform">
<identification>
<userAgent match="Android 4\.3" />
</identification>
<capabilities>
<capability name="version" value="4.3" />
</capabilities>
</gateway>
<gateway id="PlatformAndroid42" parentID="Platform">
<identification>
<userAgent match="Android 4\.2" />
</identification>
<capabilities>
<capability name="version" value="4.2" />
</capabilities>
</gateway>
<gateway id="PlatformAndroid41" parentID="Platform">
<identification>
<userAgent match="Android 4\.1" />
</identification>
<capabilities>
<capability name="version" value="4.1" />
</capabilities>
</gateway>
<gateway id="PlatformAndroid40" parentID="Platform">
<identification>
<userAgent match="Android 4\.0" />
</identification>
<capabilities>
<capability name="version" value="4.0" />
</capabilities>
</gateway>
<gateway id="PlatformAndroid30" parentID="Platform">
<identification>
<userAgent match="Android 3\.0" />
</identification>
<capabilities>
<capability name="version" value="3.0" />
</capabilities>
</gateway>
<gateway id="PlatformAndroid23" parentID="Platform">
<identification>
<userAgent match="Android 2\.3" />
</identification>
<capabilities>
<capability name="version" value="2.3.3" />
</capabilities>
</gateway>
<gateway id="PlatformAndroid22" parentID="Platform">
<identification>
<userAgent match="Android 2\.2" />
</identification>
<capabilities>
<capability name="version" value="2.2" />
</capabilities>
</gateway>
<gateway id="PlatformWinMacOs" parentID="Platform">
<identification>
<userAgent match="Macintosh" />
</identification>
<capabilities>
<capability name="platform" value="Mac OS" />
</capabilities>
</gateway>
<gateway id="PlatformWinXP" parentID="PlatformWinnt">
<identification>
<userAgent match="Windows NT 5\.1" />
</identification>
<capabilities>
<capability name="platform" value="Windows XP" />
</capabilities>
</gateway>
<gateway id="PlatformWin2003" parentID="PlatformWinnt">
<identification>
<userAgent match="Windows NT 5\.2" />
</identification>
<capabilities>
<capability name="platform" value="Windows 2003" />
</capabilities>
</gateway>
<gateway id="PlatformWinVista" parentID="PlatformWinnt">
<identification>
<userAgent match="Windows NT 6\.0" />
</identification>
<capabilities>
<capability name="platform" value="Vista" />
</capabilities>
</gateway>
<gateway id="PlatformWin7" parentID="PlatformWinnt">
<identification>
<userAgent match="Windows NT 6\.1" />
</identification>
<capabilities>
<capability name="platform" value="Windows 7" />
</capabilities>
</gateway>
<gateway id="PlatformWin8" parentID="PlatformWinnt">
<identification>
<userAgent match="Windows NT 6\.2" />
</identification>
<capabilities>
<capability name="platform" value="Windows 8" />
</capabilities>
</gateway>
<gateway id="PlatformWin81" parentID="PlatformWinnt">
<identification>
<userAgent match="Windows NT 6\.3" />
</identification>
<capabilities>
<capability name="platform" value="Windows 8.1" />
</capabilities>
</gateway>
</browsers>
(I have posted this as a community wiki so the information can be improved)
The short answer is "no, you can't check what a user has installed on their tablet."
However, you can user agent sniffing to serve different links and if your app registers a Custom URL scheme, then you can have a link that would open an app directly. On your website, the link might point to: YourApp://something. You can at least then have the option for people to launch the app from the website (although it's impossible to tell if they have the app installed or not).
That's the best you can do and this is by design. It would be pretty messed up if websites were allowed to see what was on our devices.
EDIT: This is supported on iOS, Android and Windows Phone 8.
EDIT2: Additionally, a link to YourApp://something will (at least on Windows Phone, which is all I have handy, but I suspect on iOS and Android as well) prompt the user to install the app instead if they don't have it already.

Categories

Resources