Videos and VB.NET 2012 Part 4 - Creating a Video Player for the Windows 8 Store

Introduction

Hello again! For those of you who have missed the previous instalments of this series, please see Programming Windows Media Player Featuers into Your Apps, Adding Flash and YouTube Videos into Your VB Apps, and Using XNA and Visual Basic to Display Videos. As today's topic title implies, we will create a video player, but, most importantly, we will create a Windows 8 Store application. I should say that this one was actually the most work, why? Because Windows 8 is a strange creature and the Windows 8 Store even stranger. More on that a bit later.

Before we start with our sample application, we need to know a bit more about the anatomy of a Windows 8 application, more specifically, a Windows 8 Store application.

Windows 8 Store Applications

Well, as some of you might know by now - Windows 8 works way different than Windows 7 or earlier. I suppose we'll have to get used to it. My opinion is: Windows 8.1 will be much better. I think everyone will share my sentiments on that. Still, Windows 8 is here to stay, and Windows Store will also stay for a very long time.

Mobile technology caused Microsoft to take drastic measures. We cannot blame them, as Android is still very far ahead when it comes to mobile Operating Systems. Look, with enough time, the Windows Store will become a tough competitor.

For a decent analysis on the differences between Windows 7 and Windows 8, have a look here.

If you have lived in the woods for a while, here is a list of all of Windows 8's features.

As quoted from MSDN:

A Windows Store app is a new type of app that is sold in the Windows Store and runs on Windows 8 devices. They install easily and uninstall cleanly. They run in a single window that fills the entire screen by default. They automatically work with a variety of input sources, including touch, pen, mouse, and keyboard. Instead of static icons, they use live tiles that can display notifications. You can write Windows Store apps in a variety of languages, such as C# and Visual Basic with XAML, C++ with XAML or DirectX, and JavaScript with HTML/CSS.

Based on this, we can see that the application we will be creating today will be a bit different than an application on Windows 7.

Design

Open Visual Studio 2012 or Visual Studio 2013 For Windows 8. If it is your first time opening Visual Studio 2012 for Windows 8 or Visual Studio 2013, you will be prompted to create a developer licence for your Windows 8 Store application. Luckily, there is not much interaction involved as it gets created automatically for you. You cannot publish an application to the Windows 8 Store without a valid developer licence.

More information on Windows 8 Store developer licensing can be found here.

  • Select File, New Project.
  • Expand the Templates option ( Might have to select Installed first )
  • Expand the Visual Basic option
  • Select Windows Store
  • Select Blank App from the middle section

This will create a blank Windows 8 Store application, but, guess what? This is where it is somehow unnecessarily complicated! You cannot jump into designing your app, no! Why? Well, because the Blank App template does not give all the required classes necessary for us to create an app. If you build your application now, you will get an error.

You need to do the following ( in order just to get a decent platform to build on ):

  • Open your Solution Explorer window.
  • Select the MainPage.xaml file.
  • Delete it.
  • Select Project, Add New Item. The Add New Item dialog box should open.
  • Under Visual Basic ( the left pane ) select the Windows Store template type.
  • In the center pane, select Basic Page as the type of page to add to your project.
  • Enter "MainPage.xaml" as the name for the page.

Now you may ask, why is this necessary?

Unfortunately, upon selecting the Blank App template, only the bare minimum XAML code was created. This is not sufficient to create a full blown app yet. For now, we must accept this is one hurdle - hopefully in Visual Studio 2013 this will not be the case and it will have a decent Basic Windows 8 Store template, ready to use.

Were we to build our application now, we would not get any errors. Yay! Finally! :)

Your Solution Explorer will resemble Figure 1:

Solution Explorer
Figure 1 - Solution Explorer

With our little program we will need three buttons, one MediaElement, one TextBlock and a Slider. Add them now through the Toolbox, or through the following XAML code:

        <Grid HorizontalAlignment="Center" VerticalAlignment="Top" Width="400" Height ="600" Grid.Row="2">
            <MediaElement Name="VideoFile" IsLooping="True" Source="/Common/Videos/Wildlife.wmv"  />
            <Slider x:Name="Volume" HorizontalAlignment="Left" Margin="66,492,0,0" VerticalAlignment="Top" Width="248" LargeChange="2" Maximum="10" RenderTransformOrigin="-0.03,0.017" Height="48"/>
            <TextBlock HorizontalAlignment="Left" Margin="165,474,0,0" TextWrapping="Wrap" Text="Volume" VerticalAlignment="Top" RenderTransformOrigin="0.911,2.538"/>

        </Grid>

        <Button Content="PLAY" Click="PlayButton_Click" Margin="544,389,0,201" Grid.Row="1" />
        <Button Content="PAUSE" Click="PauseButton_Click" Margin="630,389,0,201" Grid.Row="1" />
        <Button Content="STOP" Click="StopButton_Click" Margin="733,389,0,201" Grid.Row="1" />

There is one problem though: There is no MediaElement tool in the toolbox! If you were using Windows 8.1 and Visual Studio 2013, there would be. So, you don't necessarily have to add the code manually, just the MediaElement.

Let us take a closer look at the code.

The first line identifies a Grid, which serves as a container for controls.

We then created the MediaElement. Its name is VideoFile, and the source is a Wildlife video copied into a folder named Videos inside Common.

We create a slider and a normal Textblock with the Caption of Volume.

The full XAML code will look like the following:

<common:LayoutAwarePage
    x:Name="pageRoot"
    x:Class="HTG_Videos_4_Windows8_Store.MainPage"
    DataContext="{Binding DefaultViewModel, RelativeSource={RelativeSource Self}}"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:HTG_Videos_4_Windows8_Store"
    xmlns:common="using:HTG_Videos_4_Windows8_Store.Common"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Page.Resources>

        <!-- TODO: Delete this line if the key AppName is declared in App.xaml -->
        <x:String x:Key="AppName">Windows 8 Video Store</x:String>
    </Page.Resources>

    <!--
        This grid acts as a root panel for the page that defines two rows:
        * Row 0 contains the back button and page title
        * Row 1 contains the rest of the page layout
    -->
    <Grid Style="{StaticResource LayoutRootStyle}">
        <Grid.RowDefinitions>
            <RowDefinition Height="140"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <!-- Back button and page title -->
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Button x:Name="backButton" Click="GoBack" IsEnabled="{Binding Frame.CanGoBack, ElementName=pageRoot}" Style="{StaticResource BackButtonStyle}"/>
            <TextBlock x:Name="pageTitle" Grid.Column="1" Text="{StaticResource AppName}" Style="{StaticResource PageHeaderTextStyle}"/>
        </Grid>

        <Grid HorizontalAlignment="Center" VerticalAlignment="Top" Width="400" Height ="600" Grid.Row="2">
            <MediaElement Name="VideoFile" IsLooping="True" Source="/Common/Videos/Wildlife.wmv"  />
            <Slider x:Name="Volume" HorizontalAlignment="Left" Margin="66,492,0,0" VerticalAlignment="Top" Width="248" LargeChange="2" Maximum="10" RenderTransformOrigin="-0.03,0.017" Height="48"/>
            <TextBlock HorizontalAlignment="Left" Margin="165,474,0,0" TextWrapping="Wrap" Text="Volume" VerticalAlignment="Top" RenderTransformOrigin="0.911,2.538"/>

        </Grid>

        <Button Content="PLAY" Click="PlayButton_Click" Margin="544,389,0,201" Grid.Row="1" />
        <Button Content="PAUSE" Click="PauseButton_Click" Margin="630,389,0,201" Grid.Row="1" />
        <Button Content="STOP" Click="StopButton_Click" Margin="733,389,0,201" Grid.Row="1" />

        <VisualStateManager.VisualStateGroups>

            <!-- Visual states reflect the application's view state -->
            <VisualStateGroup x:Name="ApplicationViewStates">
                <VisualState x:Name="FullScreenLandscape"/>
                <VisualState x:Name="Filled"/>

                <!-- The entire page respects the narrower 100-pixel margin convention for portrait -->
                <VisualState x:Name="FullScreenPortrait">
                    <Storyboard>
                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="backButton" Storyboard.TargetProperty="Style">
                            <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PortraitBackButtonStyle}"/>
                        </ObjectAnimationUsingKeyFrames>
                    </Storyboard>
                </VisualState>

                <!-- The back button and title have different styles when snapped -->
                <VisualState x:Name="Snapped">
                    <Storyboard>
                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="backButton" Storyboard.TargetProperty="Style">
                            <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource SnappedBackButtonStyle}"/>
                        </ObjectAnimationUsingKeyFrames>
                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="pageTitle" Storyboard.TargetProperty="Style">
                            <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource SnappedPageHeaderTextStyle}"/>
                        </ObjectAnimationUsingKeyFrames>
                    </Storyboard>
                </VisualState>
            </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>
    </Grid>
</common:LayoutAwarePage>

Lastly we created the three buttons ( Play, Pause, Stop ). If you are a newbie to Windows 8 programming and XAML, you will notice that there is a Click attribute associated with each of the buttons. This is the button's event handler where we can put our VB code in order for the button to function. Once done, your design will resemble Figure 2.

Our design
Figure 2 - Our design

Actual Coding - VB code

Add the following code inside MainPage.xaml.vb:

    Private Sub PlayButton_Click(ByVal sender As Object, e As RoutedEventArgs)
        VideoFile.Play() 'Play Media File

    End Sub

    Private Sub PauseButton_Click(ByVal sender As Object, e As RoutedEventArgs)
        If VideoFile.CanPause Then 'If Playing Pause, Else Don't
            VideoFile.Pause()
        End If

    End Sub

    Private Sub StopButton_Click(ByVal sender As Object, e As RoutedEventArgs)
        VideoFile.Stop() 'Stop Media Playing
    End Sub

    
    Private Sub VolumeValueChanged(sender As Object, e As RangeBaseValueChangedEventArgs) Handles Volume.ValueChanged
        VideoFile.Volume = Volume.Value 'Set Volume According to Slider's Value

    End Sub

Your entire VB file should now look like:

Imports Windows

' The Basic Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234237

''' <summary>
''' A basic page that provides characteristics common to most applications.
''' </summary>
Public NotInheritable Class MainPage
    Inherits Common.LayoutAwarePage

    ''' <summary>
    ''' Populates the page with content passed during navigation.  Any saved state is also
    ''' provided when recreating a page from a prior session.
    ''' </summary>
    ''' <param name="navigationParameter">The parameter value passed to
    ''' <see cref="Frame.Navigate"/> when this page was initially requested.
    ''' </param>
    ''' <param name="pageState">A dictionary of state preserved by this page during an earlier
    ''' session.  This will be null the first time a page is visited.</param>
    Protected Overrides Sub LoadState(navigationParameter As Object, pageState As Dictionary(Of String, Object))

    End Sub

    ''' <summary>
    ''' Preserves state associated with this page in case the application is suspended or the
    ''' page is discarded from the navigation cache.  Values must conform to the serialization
    ''' requirements of <see cref="Common.SuspensionManager.SessionState"/>.
    ''' </summary>
    ''' <param name="pageState">An empty dictionary to be populated with serializable state.</param>
    Protected Overrides Sub SaveState(pageState As Dictionary(Of String, Object))

    End Sub

    Private Sub PlayButton_Click(ByVal sender As Object, e As RoutedEventArgs)
        VideoFile.Play()

    End Sub

    Private Sub PauseButton_Click(ByVal sender As Object, e As RoutedEventArgs)
        If VideoFile.CanPause Then
            VideoFile.Pause()
        End If

    End Sub

    Private Sub StopButton_Click(ByVal sender As Object, e As RoutedEventArgs)
        VideoFile.Stop()
    End Sub

    
    Private Sub VolumeValueChanged(sender As Object, e As RangeBaseValueChangedEventArgs) Handles Volume.ValueChanged
        VideoFile.Volume = Volume.Value

    End Sub


End Class

If you build and run your application now, you will see that everything works. OK, it's not a major mind-blowing-world-changing-revolutionary app, but still, it is a Windows 8 Store app, and as such, will function as one. You might have noticed the white square with the white X inside upon launch. This is where we can put  a picture. This picture may represent your company or anything else depending on your needs. You can find this picture inside the Solution Explorer under Assets, and replace it with yours. There are also many variants of this picture so make sure to edit all of them accordingly.

What now?

Validating Your Windows Store 8 Applications

Well, we need to ensure that this app conforms to Windows 8 Store standards. This is done by clicking the Windows App Certification Kit tile on your desktop, as shown in Figure 3.

Windows App Certification Kit
Figure 3 - Windows App Certification Kit

Needless to say, this tests your application and ensures that it conforms to the Windows 8 Store standard.

After selecting the tile, you will be confronted with the following screen:

Select Type of Application to Validate
Figure 4 - Select Type of Application to Validate

Select Validate Windows Store App.

The next screen will load after the application scans your PC for potential apps. You will then see a screen similar to Figure 5.

Select your application from the list
Figure 5 - Select your application from the list

After you have selected your application from the displayed list (in this example's case: HTG_Videos_4_Windows8_Store ), click Next. A resemblance of Figure 6 will show.

Validating
Figure 6 - Validating

This process takes a while. Even for a very small application like ours, it takes about 10 minutes! Imagine if you have a very large and complicated system... Anyway, why it takes so long is because it tests a lot of things. It tests the following:

  1. Clean reversible install test - Reason: A clean, reversible, installation allows users to successfully manage (deploy, and remove) applications on their system.
  2. Install to the correct folders test - Reason: Windows provides specific locations in the file system to store programs and software components, shared application data, and application data specific to a user.
  3. Digitally signed file test - Reason: An Authenticode digital signature allows users to be sure that the software is genuine. It also allows detection if a file has been tampered with, e.g. infected by a virus.
  4. Support x64 Windows test - Reason: To maintain compatibility with 64-bit versions of Windows, it is necessary that applications should natively support 64-bit or at minimum 32-bit Windows based applications to run seamlessly on 64-bit.
  5. OS version checking test - Reason: Applications must not perform version checks for equality (== 5.1). If you need a specific feature, check whether the feature is available. If you need Windows XP, check for Windows XP or later (&gt;= 5.1), This way, your detection code will continue to work on future versions of Windows. Driver installers and uninstall modules should never check the OS version.
  6. User account control (UAC) test - Reason: Most applications do not require administrator privileges at run time, and should be just fine running as a standard-user. Windows applications must have a manifest (embedded or external) to define its execution level that tells OS the privileges needed to run the application.
  7. Adhere to system restart manager messages - Reason: In a critical shutdown, applications that return FALSE to WM_QUERYENDSESSION will be sent WM_ENDSESSION and closed, while those that time out in response to WM_QUERYENDSESSION will be terminated.
  8. Safe mode test - Reason: By default, most drivers and services that did not come preinstalled with Windows are not started in Safe Mode. They should remain disabled unless they are needed for basic operations of the system or for diagnostic and recovery purposes.
  9. Multiuser session test - Reason: Windows users should be able to run concurrent sessions without conflict or disruption. Applications must ensure that when running in multiple sessions either locally or remotely, the normal functionality of the application should not be impacted. Application settings and data files should not be persisted across users. A user’s privacy and preferences should be isolated to the user’s session.
  10. Crashes and hangs test - Reason: Application failures such as crashes and hangs are a major disruption to users and cause frustration. Eliminating such failures improves application stability and reliability, and overall, provides users with a better application experience.

Your program might launch while these tests are running, please make sure not to interact with it, as it will delay this tedious (but very necessary) process even further. When the tests have completed it will prompt you to be saved. Save the Report. The results of the test should display. If you have Failed, the detailed descriptions will explain exactly why. The most common problem will be the Type of Build their project has. If you have Built a debug version of your program, the tests will inform you as such and you will fail, as displayed in Figure 7. If one test has failed, your whole program fails. This might seem unfair, but it makes 100% sure that there will be no issues when run on the various devices.

Failed test
Figure 7 - Failed test. It kind of feels like my driving tests which I failed many many times....

In order to fix the issue(s) you'll have to follow the Kit's advice. I know that sounds unhelpful, but as mentioned, the report is very detailed. In my case I had a Debug version of my program (on purpose so that I can display the Failed screen). I had to switch it to Release Build. You can do this in two ways:

On your Run toolbar, switch the Build to Release - Figure 8.

Release mode
Figure 8 - Release mode

Or, in your Project Properties, switch to Release Build - Figure 9.

Release Mode
Figure 9
- Release Mode

Run the Windows App Certification Kit again. Wait ten minutes again. And hope for the best. Figure 10 shows you what it will display when passed.

Passed
Figure 10 - Passed - yay!.

The detailed Report that got saved will look like the following:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/xsl' href='C:\ProgramData\Windows App Certification Kit\results.xsl'?>
<REPORT OVERALL_RESULT="PASS" VERSION="2.0.9200" TOOLSET_ARCHITECTURE="X64" SecureBoot="FALSE" APP_TYPE="WindowsStore" PUBLISHER_DISPLAY_NAME="HTG" OSVERSION="6.2.9200.0" OS="Microsoft Windows 8 Pro" PER_USER_APPLICATION="" PARTIAL_RUN="FALSE" LCID="1033" VALIDATION_TYPE="UI" ReportGenerationTime="7/16/2013 6:45:21 PM" ID="bd06bb5407b952eec29740c3071cce58">
  <REQUIREMENTS>
    <REQUIREMENT NUMBER="1" TITLE="Clean reversible install test" RATIONALE="A clean, reversible, installation allows users to successfully manage (deploy, and remove) applications on their system." />
    <REQUIREMENT NUMBER="2" TITLE="Install to the correct folders test" RATIONALE="Windows provides specific locations in the file system to store programs and software components, shared application data, and application data specific to a user." />
    <REQUIREMENT NUMBER="3" TITLE="Digitally signed file test" RATIONALE="An Authenticode digital signature allows users to be sure that the software is genuine. It also allows detection if a file has been tampered with e.g. infected by a virus." />
    <REQUIREMENT NUMBER="4" TITLE="Support x64 Windows test" RATIONALE="To maintain compatibility with 64-bit versions of Windows, it is necessary that applications should natively support 64-bit or at minimum 32-bit Windows based applications to run seamlessly on 64-bit." />
    <REQUIREMENT NUMBER="5" TITLE="OS version checking test" RATIONALE="Applications must not perform version checks for equality (== 5.1). If you need a specific feature, check whether the feature is available. If you need Windows XP, check for Windows XP or later (>= 5.1), This way, your detection code will continue to work on future versions of Windows. Driver installers and uninstall modules should never check the OS version." />
    <REQUIREMENT NUMBER="6" TITLE="User account control (UAC) test" RATIONALE="Most applications do not require administrator privileges at run time, and should be just fine running as a standard-user. Windows applications must have a manifest (embedded or external) to define its execution level that tells OS the privileges needed to run the application." />
    <REQUIREMENT NUMBER="7" TITLE="Adhere to system restart manager messages" RATIONALE="In a critical shutdown, applications that return FALSE to WM_QUERYENDSESSION will be sent WM_ENDSESSION and closed, while those that time out in response to WM_QUERYENDSESSION will be terminated." />
    <REQUIREMENT NUMBER="8" TITLE="Safe mode test" RATIONALE="By default, most drivers and services that did not come preinstalled with Windows are not started in Safe Mode. They should remain disabled unless they are needed for basic operations of the system or for diagnostic and recovery purposes." />
    <REQUIREMENT NUMBER="9" TITLE="Multiuser session test" RATIONALE="Windows users should be able to run concurrent sessions without conflict or disruption.  Applications must ensure that when running in multiple sessions either locally or remotely, the normal functionality of the application should not be impacted. Application settings and data files should not be persisted across users. A user’s privacy and preferences should be isolated to the user’s session." />
    <REQUIREMENT NUMBER="10" TITLE="Crashes and hangs test" RATIONALE="Application failures such as crashes and hangs are a major disruption to users and cause frustration. Eliminating such failures improves application stability and reliability, and overall, provides users with a better application experience.">
      <TEST INDEX="47" NAME="App launch tests" DESCRIPTION="App launch tests." EXECUTIONTIME="00h:00m:25s.83ms">
        <RESULT><![CDATA[PASS]]></RESULT>
        <MESSAGES />
      </TEST>
      <TEST INDEX="21" NAME="Crashes and hangs" DESCRIPTION="Do not crash or hang during the testing process." EXECUTIONTIME="00h:00m:06s.78ms">
        <RESULT><![CDATA[PASS]]></RESULT>
        <MESSAGES />
      </TEST>
    </REQUIREMENT>
    <REQUIREMENT NUMBER="11" TITLE="Compatibility and resiliency test" RATIONALE="When Windows detects that an application has operated in an incompatible manner, it applies a compatibility fix that causes the application to behave correctly, ensuring a positive user experience. Applications should not rely on this behavior since it is only provided to allow legacy applications to work correctly on Windows." />
    <REQUIREMENT NUMBER="12" TITLE="App manifest compliance test" RATIONALE="The package manifest was missing one or more required attributes.">
      <TEST INDEX="31" NAME="App manifest" DESCRIPTION="App manifest must include valid entries for all required fields." EXECUTIONTIME="00h:00m:03s.92ms">
        <RESULT><![CDATA[PASS]]></RESULT>
        <MESSAGES />
      </TEST>
    </REQUIREMENT>
    <REQUIREMENT NUMBER="13" TITLE="Windows security best practices test" RATIONALE="An application should not change the default Windows security settings." />
    <REQUIREMENT NUMBER="14" TITLE="Windows security features test" RATIONALE="Applications must opt-into Windows security features.">
      <TEST INDEX="33" NAME="Binary analyzer" DESCRIPTION="Analysis of security features enabled on binaries" EXECUTIONTIME="00h:00m:03s.57ms">
        <RESULT><![CDATA[PASS]]></RESULT>
        <MESSAGES />
      </TEST>
    </REQUIREMENT>
    <REQUIREMENT NUMBER="15" TITLE="Supported API test" RATIONALE="The application should only refer to the APIs allowed by the Windows SDK for Windows Store Apps.">
      <TEST INDEX="38" NAME="Supported APIs" DESCRIPTION="Windows Store App must only use supported platform APIs." EXECUTIONTIME="00h:00m:05s.55ms">
        <RESULT><![CDATA[PASS]]></RESULT>
        <MESSAGES />
      </TEST>
    </REQUIREMENT>
    <REQUIREMENT NUMBER="17" TITLE="Performance test" RATIONALE="The application should have a fast and responsive launch and suspend experience while consuming a reasonable amount of system resources (CPU, File IO, Memory etc.) to enable fast switching and multitasking between previously unopened applications.">
      <TEST INDEX="50" NAME="Bytecode generation" DESCRIPTION="Byte code generation should be able to complete successfully for packages containing an HTML5 Windows Store app." EXECUTIONTIME="00h:00m:02s.37ms">
        <RESULT><![CDATA[PASS]]></RESULT>
        <MESSAGES />
      </TEST>
      <TEST INDEX="43" NAME="Performance launch" DESCRIPTION="Application should have a responsive launch time with reasonable CPU, File IO and Memory usage" EXECUTIONTIME="00h:01m:43s.77ms">
        <RESULT><![CDATA[PASS]]></RESULT>
        <MESSAGES />
      </TEST>
      <TEST INDEX="44" NAME="Performance suspend" DESCRIPTION="Application should have a responsive suspend with reasonable CPU and File IO usage" EXECUTIONTIME="00h:01m:20s.02ms">
        <RESULT><![CDATA[PASS]]></RESULT>
        <MESSAGES />
      </TEST>
    </REQUIREMENT>
    <REQUIREMENT NUMBER="19" TITLE="App manifest resources test" RATIONALE="The Appx Package Manifest should have valid resources defined in the resources.pri file, as per the Appx Packaging Specification and Appx Manifest Schema.">
      <TEST INDEX="45" NAME="App resources validation" DESCRIPTION="The package should have valid resources defined in the resources.pri file." EXECUTIONTIME="00h:00m:01s.06ms">
        <RESULT><![CDATA[PASS]]></RESULT>
        <MESSAGES />
      </TEST>
    </REQUIREMENT>
    <REQUIREMENT NUMBER="20" TITLE="Debug configuration test" RATIONALE="The App should not install any debug binaries.">
      <TEST INDEX="46" NAME="Debug configuration" DESCRIPTION="The App should not install any debug binaries." EXECUTIONTIME="00h:00m:03s.22ms">
        <RESULT><![CDATA[PASS]]></RESULT>
        <MESSAGES />
      </TEST>
    </REQUIREMENT>
    <REQUIREMENT NUMBER="21" TITLE="File encoding" RATIONALE="Packages containing an HTML5 Windows Store app must have correct file encoding.">
      <TEST INDEX="49" NAME="UTF-8 file encoding" DESCRIPTION="Packages containing an HTML5 Windows Store app must have correct file encoding." EXECUTIONTIME="00h:00m:01s.75ms">
        <RESULT><![CDATA[PASS]]></RESULT>
        <MESSAGES />
      </TEST>
    </REQUIREMENT>
    <REQUIREMENT NUMBER="22" TITLE="Direct3D feature level support" RATIONALE="Applications must render content on Direct3D feature level 9.1 hardware.">
      <TEST INDEX="51" NAME="Direct3D feature level support" DESCRIPTION="Applications must render content on Direct3D feature level 9.1 hardware." EXECUTIONTIME="00h:00m:13s.68ms">
        <RESULT><![CDATA[PASS]]></RESULT>
        <MESSAGES />
      </TEST>
    </REQUIREMENT>
    <REQUIREMENT NUMBER="23" TITLE="App Capabilities test" RATIONALE="Packages declaring special-use capabilities will have to provide justifications during the onboarding process.">
      <TEST INDEX="52" NAME="Special Use Capabilities" DESCRIPTION="Packages declaring special-use capabilities will have to provide justifications during the onboarding process." EXECUTIONTIME="00h:00m:01s.89ms">
        <RESULT><![CDATA[PASS]]></RESULT>
        <MESSAGES />
      </TEST>
    </REQUIREMENT>
    <REQUIREMENT NUMBER="24" TITLE="Windows Runtime metadata validation" RATIONALE="Metadata needs to be conformant and consistent across all generation sources.">
      <TEST INDEX="56" NAME="ExclusiveTo attribute test" DESCRIPTION="A class must not implement an interface that is marked ExclusiveTo another class." EXECUTIONTIME="00h:00m:01s.98ms">
        <RESULT><![CDATA[PASS]]></RESULT>
        <MESSAGES />
      </TEST>
      <TEST INDEX="57" NAME="Type location test" DESCRIPTION="Types must be defined in the metadata file with the longest matching namespace." EXECUTIONTIME="00h:00m:01s.26ms">
        <RESULT><![CDATA[PASS]]></RESULT>
        <MESSAGES />
      </TEST>
      <TEST INDEX="55" NAME="Type name case-sensitivity test" DESCRIPTION="Namespace and type names must not vary only by casing." EXECUTIONTIME="00h:00m:00s.81ms">
        <RESULT><![CDATA[PASS]]></RESULT>
        <MESSAGES />
      </TEST>
      <TEST INDEX="54" NAME="Type name correctness test" DESCRIPTION="Only system types can be in the Windows namespace and no types can be in the global namespace." EXECUTIONTIME="00h:00m:00s.79ms">
        <RESULT><![CDATA[PASS]]></RESULT>
        <MESSAGES />
      </TEST>
      <TEST INDEX="58" NAME="General metadata correctness test" DESCRIPTION="Metadata files must meet various requirements in order to be valid and correct." EXECUTIONTIME="00h:00m:02s.17ms">
        <RESULT><![CDATA[PASS]]></RESULT>
        <MESSAGES />
      </TEST>
      <TEST INDEX="53" NAME="Properties test" DESCRIPTION="Write-only and indexer properties may not be used. Corresponding getter and setter methods must match in type." EXECUTIONTIME="00h:00m:00s.77ms">
        <RESULT><![CDATA[PASS]]></RESULT>
        <MESSAGES />
      </TEST>
    </REQUIREMENT>
  </REQUIREMENTS>
  <APPLICATIONS>
    <Installed_Programs>
      <Program Name="a9338faa-658c-430d-b4f8-7445eef018a5" Type="Application" Source="AppxPackage" Publisher="CN=HTG" Version="1.0.0.0" Language="1033" OnSystemDrive="true" RootDirPath="C:\Users\HTG\Desktop\HTG_Videos_4_Windows8_Store\HTG_Videos_4_Windows8_Store\bin\Release\AppX" PathEvidenceId="0x172a" RNP="0x1" DNP="0xd" EvidenceId="0x172a" Id="000045fe27ceef694a4952e635ab3f4653f200000904">
        <Indicators>
          <DirectoryIndicators>
            <Directory Name="appx" Path="c:\users\htg\desktop\htg_videos_4_windows8_store\htg_videos_4_windows8_store\bin\release\appx" RNP="0x9" DNP="0xb" UniqueId="0x172b" Id="0000b8d4f78c026c96947b228660a23786130170690d" />
          </DirectoryIndicators>
          <PackageManifestIndicator>
            <PackageManifest PackageFullName="a9338faa-658c-430d-b4f8-7445eef018a5_1.0.0.0_neutral__d132wben4fgky" />
            <Identity Name="a9338faa-658c-430d-b4f8-7445eef018a5" Publisher="CN=HTG" Version="1.0.0.0" ProcessorArchitecture="neutral" />
            <Properties>
              <DisplayName>HTG_Videos_4_Windows8_Store</DisplayName>
              <PublisherDisplayName>HTG</PublisherDisplayName>
              <Logo>Assets\StoreLogo.png</Logo>
            </Properties>
            <Resources>
              <Resource Language="EN-US" />
            </Resources>
            <Prerequisites>
              <OSMinVersion>6.2.1</OSMinVersion>
              <OSMaxVersionTested>6.2.1</OSMaxVersionTested>
            </Prerequisites>
            <Capabilities>
              <Capability Name="internetClient" />
            </Capabilities>
          </PackageManifestIndicator>
        </Indicators>
        <StaticProperties>
          <Files Id="0000db35a36a8c4b07e29f457cb5b611b1cab42f9260">
            <File Name="HTG_Videos_4_Windows8_Store.exe" Id="00008ecc50133df5a46d376ffdc9d22242af77b6f05b" ProductName="HTG_Videos_4_Windows8_Store" ProductVersion="1.0.0.0" VerLanguage="0" ShortName="HTG_VI~1.EXE" SwitchBackContext="0x0100000000000602" FileVersion="1.0.0.0" Size="0xcc00" SizeOfImage="0x14000" PeHeaderHash="010134049830ab5d9d3d90b1d58f5d4890fc6293b770" PeChecksum="0x0" PeImageType="0x14c" PeSubsystem="2" BinProductVersion="1.0.0.0" BinFileVersion="1.0.0.0" FileDescription="HTG_Videos_4_Windows8_Store" InternalName="HTG_Videos_4_Windows8_Store.exe" LegalCopyright="Copyright ©  2013" LinkerVersion="11.0" LinkDate="07/16/2013 15:53:24" BinaryType="DOTNET32" Created="07/16/2013 15:56:13" Modified="07/16/2013 15:53:25" OriginalFilename="HTG_Videos_4_Windows8_Store.exe" RunLevel="AsInvoker" UiAccess="false" Path="c:\Users\HTG\Desktop\htg_videos_4_windows8_store\htg_videos_4_windows8_store\bin\Release\AppX" RNP="0x4" DNP="0x5" LowerCaseLongPath="c:\users\htg\desktop\htg_videos_4_windows8_store\htg_videos_4_windows8_store\bin\release\appx\htg_videos_4_windows8_store.exe" LongPathHash="0000f94da4171375b0c2d59a681027d95e48e85f8cc8" UniqueId="0x172c" />
          </Files>
        </StaticProperties>
      </Program>
    </Installed_Programs>
  </APPLICATIONS>
  <DEPENDENCY_INFORMATION>
    <AitStaticAnalysis ProgramId="000045fe27ceef694a4952e635ab3f4653f200000904" AnalysisVersion="1.54" DictionaryVersion="1.6" Type="Package" Id="a9338faa-658c-430d-b4f8-7445eef018a5_1.0.0.0_neutral__d132wben4fgky">
      <AitFile ErrorCode="0" Name="HTG_Videos_4_Windows8_Store.exe" Id="00008ecc50133df5a46d376ffdc9d22242af77b6f05b">
        <AitCategory Id="ApiStatic">
          <AitFeature Name="mscoree.dll!_CorExeMain" />
        </AitCategory>
        <AitCategory Id="DotNetWinRt">
          <AitFeature Name="Windows.ApplicationModel.DesignMode" />
          <AitFeature Name="Windows.ApplicationModel.DesignMode.get_DesignModeEnabled" />
          <AitFeature Name="Windows.ApplicationModel.SuspendingDeferral" />
          <AitFeature Name="Windows.ApplicationModel.SuspendingDeferral.Complete" />
          <AitFeature Name="Windows.ApplicationModel.SuspendingEventArgs" />
          <AitFeature Name="Windows.ApplicationModel.SuspendingEventArgs.get_SuspendingOperation" />
          <AitFeature Name="Windows.ApplicationModel.SuspendingOperation" />
          <AitFeature Name="Windows.ApplicationModel.SuspendingOperation.GetDeferral" />
          <AitFeature Name="Windows.ApplicationModel.Activation.ApplicationExecutionState" />
          <AitFeature Name="Windows.ApplicationModel.Activation.LaunchActivatedEventArgs" />
          <AitFeature Name="Windows.ApplicationModel.Activation.LaunchActivatedEventArgs.get_Arguments" />
          <AitFeature Name="Windows.ApplicationModel.Activation.LaunchActivatedEventArgs.get_PreviousExecutionState" />
          <AitFeature Name="Windows.Foundation.IAsyncOperation`1" />
          <AitFeature Name="Windows.Foundation.Rect" />
          <AitFeature Name="Windows.Foundation.Rect..ctor" />
          <AitFeature Name="Windows.Foundation.Rect.get_Height" />
          <AitFeature Name="Windows.Foundation.Rect.get_Width" />
          <AitFeature Name="Windows.Foundation.Size" />
          <AitFeature Name="Windows.Foundation.Size..ctor" />
          <AitFeature Name="Windows.Foundation.Size.get_Height" />
          <AitFeature Name="Windows.Foundation.Size.get_Width" />
          <AitFeature Name="Windows.Foundation.TypedEventHandler`2" />
          <AitFeature Name="Windows.Foundation.Collections.CollectionChange" />
          <AitFeature Name="Windows.Foundation.Collections.IMapChangedEventArgs`1" />
          <AitFeature Name="Windows.Foundation.Collections.IObservableMap`2" />
          <AitFeature Name="Windows.Foundation.Collections.MapChangedEventHandler`2" />
          <AitFeature Name="Windows.Foundation.Metadata.WebHostHiddenAttribute" />
          <AitFeature Name="Windows.Foundation.Metadata.WebHostHiddenAttribute..ctor" />
          <AitFeature Name="Windows.Storage.ApplicationData" />
          <AitFeature Name="Windows.Storage.ApplicationData.get_Current" />
          <AitFeature Name="Windows.Storage.ApplicationData.get_LocalFolder" />
          <AitFeature Name="Windows.Storage.CreationCollisionOption" />
          <AitFeature Name="Windows.Storage.IStorageFile" />
          <AitFeature Name="Windows.Storage.StorageFile" />
          <AitFeature Name="Windows.Storage.StorageFile.OpenSequentialReadAsync" />
          <AitFeature Name="Windows.Storage.StorageFolder" />
          <AitFeature Name="Windows.Storage.StorageFolder.CreateFileAsync" />
          <AitFeature Name="Windows.Storage.StorageFolder.GetFileAsync" />
          <AitFeature Name="Windows.Storage.Streams.IInputStream" />
          <AitFeature Name="Windows.System.VirtualKey" />
          <AitFeature Name="Windows.UI.Core.AcceleratorKeyEventArgs" />
          <AitFeature Name="Windows.UI.Core.AcceleratorKeyEventArgs.get_EventType" />
          <AitFeature Name="Windows.UI.Core.AcceleratorKeyEventArgs.get_VirtualKey" />
          <AitFeature Name="Windows.UI.Core.AcceleratorKeyEventArgs.put_Handled" />
          <AitFeature Name="Windows.UI.Core.CoreAcceleratorKeyEventType" />
          <AitFeature Name="Windows.UI.Core.CoreDispatcher" />
          <AitFeature Name="Windows.UI.Core.CoreDispatcher.add_AcceleratorKeyActivated" />
          <AitFeature Name="Windows.UI.Core.CoreDispatcher.remove_AcceleratorKeyActivated" />
          <AitFeature Name="Windows.UI.Core.CoreVirtualKeyStates" />
          <AitFeature Name="Windows.UI.Core.CoreWindow" />
          <AitFeature Name="Windows.UI.Core.CoreWindow.GetKeyState" />
          <AitFeature Name="Windows.UI.Core.CoreWindow.add_PointerPressed" />
          <AitFeature Name="Windows.UI.Core.CoreWindow.get_Dispatcher" />
          <AitFeature Name="Windows.UI.Core.CoreWindow.remove_PointerPressed" />
          <AitFeature Name="Windows.UI.Core.PointerEventArgs" />
          <AitFeature Name="Windows.UI.Core.PointerEventArgs.get_CurrentPoint" />
          <AitFeature Name="Windows.UI.Core.PointerEventArgs.put_Handled" />
          <AitFeature Name="Windows.UI.Core.WindowSizeChangedEventArgs" />
          <AitFeature Name="Windows.UI.Input.PointerPoint" />
          <AitFeature Name="Windows.UI.Input.PointerPoint.get_Properties" />
          <AitFeature Name="Windows.UI.Input.PointerPointProperties" />
          <AitFeature Name="Windows.UI.Input.PointerPointProperties.get_IsLeftButtonPressed" />
          <AitFeature Name="Windows.UI.Input.PointerPointProperties.get_IsMiddleButtonPressed" />
          <AitFeature Name="Windows.UI.Input.PointerPointProperties.get_IsRightButtonPressed" />
          <AitFeature Name="Windows.UI.Input.PointerPointProperties.get_IsXButton1Pressed" />
          <AitFeature Name="Windows.UI.Input.PointerPointProperties.get_IsXButton2Pressed" />
          <AitFeature Name="Windows.UI.ViewManagement.ApplicationView" />
          <AitFeature Name="Windows.UI.ViewManagement.ApplicationView.get_Value" />
          <AitFeature Name="Windows.UI.ViewManagement.ApplicationViewState" />
          <AitFeature Name="Windows.UI.Xaml.Application" />
          <AitFeature Name="Windows.UI.Xaml.Application..ctor" />
          <AitFeature Name="Windows.UI.Xaml.Application.LoadComponent" />
          <AitFeature Name="Windows.UI.Xaml.Application.Start" />
          <AitFeature Name="Windows.UI.Xaml.Application.add_Suspending" />
          <AitFeature Name="Windows.UI.Xaml.Application.remove_Suspending" />
          <AitFeature Name="Windows.UI.Xaml.ApplicationInitializationCallback" />
          <AitFeature Name="Windows.UI.Xaml.ApplicationInitializationCallback..ctor" />
          <AitFeature Name="Windows.UI.Xaml.ApplicationInitializationCallbackParams" />
          <AitFeature Name="Windows.UI.Xaml.DataTemplate" />
          <AitFeature Name="Windows.UI.Xaml.DataTemplate.LoadContent" />
          <AitFeature Name="Windows.UI.Xaml.DependencyObject" />
          <AitFeature Name="Windows.UI.Xaml.DependencyObject.ClearValue" />
          <AitFeature Name="Windows.UI.Xaml.DependencyObject.GetValue" />
          <AitFeature Name="Windows.UI.Xaml.DependencyObject.SetValue" />
          <AitFeature Name="Windows.UI.Xaml.DependencyProperty" />
          <AitFeature Name="Windows.UI.Xaml.DependencyProperty.Register" />
          <AitFeature Name="Windows.UI.Xaml.DependencyProperty.RegisterAttached" />
          <AitFeature Name="Windows.UI.Xaml.DependencyPropertyChangedEventArgs" />
          <AitFeature Name="Windows.UI.Xaml.FrameworkElement" />
          <AitFeature Name="Windows.UI.Xaml.FrameworkElement.FindName" />
          <AitFeature Name="Windows.UI.Xaml.FrameworkElement.add_Loaded" />
          <AitFeature Name="Windows.UI.Xaml.FrameworkElement.add_Unloaded" />
          <AitFeature Name="Windows.UI.Xaml.FrameworkElement.get_ActualHeight" />
          <AitFeature Name="Windows.UI.Xaml.FrameworkElement.get_ActualWidth" />
          <AitFeature Name="Windows.UI.Xaml.FrameworkElement.put_HorizontalAlignment" />
          <AitFeature Name="Windows.UI.Xaml.FrameworkElement.remove_Loaded" />
          <AitFeature Name="Windows.UI.Xaml.FrameworkElement.remove_Unloaded" />
          <AitFeature Name="Windows.UI.Xaml.HorizontalAlignment" />
          <AitFeature Name="Windows.UI.Xaml.PropertyChangedCallback" />
          <AitFeature Name="Windows.UI.Xaml.PropertyChangedCallback..ctor" />
          <AitFeature Name="Windows.UI.Xaml.PropertyMetadata" />
          <AitFeature Name="Windows.UI.Xaml.PropertyMetadata..ctor" />
          <AitFeature Name="Windows.UI.Xaml.RoutedEventArgs" />
          <AitFeature Name="Windows.UI.Xaml.RoutedEventArgs..ctor" />
          <AitFeature Name="Windows.UI.Xaml.RoutedEventHandler" />
          <AitFeature Name="Windows.UI.Xaml.RoutedEventHandler..ctor" />
          <AitFeature Name="Windows.UI.Xaml.SuspendingEventHandler" />
          <AitFeature Name="Windows.UI.Xaml.SuspendingEventHandler..ctor" />
          <AitFeature Name="Windows.UI.Xaml.UIElement" />
          <AitFeature Name="Windows.UI.Xaml.UIElement.Arrange" />
          <AitFeature Name="Windows.UI.Xaml.UIElement.InvalidateMeasure" />
          <AitFeature Name="Windows.UI.Xaml.UIElement.Measure" />
          <AitFeature Name="Windows.UI.Xaml.UIElement.get_DesiredSize" />
          <AitFeature Name="Windows.UI.Xaml.Visibility" />
          <AitFeature Name="Windows.UI.Xaml.VisualState" />
          <AitFeature Name="Windows.UI.Xaml.VisualStateGroup" />
          <AitFeature Name="Windows.UI.Xaml.VisualStateManager" />
          <AitFeature Name="Windows.UI.Xaml.VisualStateManager.GoToState" />
          <AitFeature Name="Windows.UI.Xaml.Window" />
          <AitFeature Name="Windows.UI.Xaml.Window.Activate" />
          <AitFeature Name="Windows.UI.Xaml.Window.add_SizeChanged" />
          <AitFeature Name="Windows.UI.Xaml.Window.get_Bounds" />
          <AitFeature Name="Windows.UI.Xaml.Window.get_Content" />
          <AitFeature Name="Windows.UI.Xaml.Window.get_CoreWindow" />
          <AitFeature Name="Windows.UI.Xaml.Window.get_Current" />
          <AitFeature Name="Windows.UI.Xaml.Window.put_Content" />
          <AitFeature Name="Windows.UI.Xaml.Window.remove_SizeChanged" />
          <AitFeature Name="Windows.UI.Xaml.WindowSizeChangedEventHandler" />
          <AitFeature Name="Windows.UI.Xaml.WindowSizeChangedEventHandler..ctor" />
          <AitFeature Name="Windows.UI.Xaml.Controls.Button" />
          <AitFeature Name="Windows.UI.Xaml.Controls.ContentControl" />
          <AitFeature Name="Windows.UI.Xaml.Controls.ContentControl.get_Content" />
          <AitFeature Name="Windows.UI.Xaml.Controls.Control" />
          <AitFeature Name="Windows.UI.Xaml.Controls.Frame" />
          <AitFeature Name="Windows.UI.Xaml.Controls.Frame..ctor" />
          <AitFeature Name="Windows.UI.Xaml.Controls.Frame.GetNavigationState" />
          <AitFeature Name="Windows.UI.Xaml.Controls.Frame.GoBack" />
          <AitFeature Name="Windows.UI.Xaml.Controls.Frame.GoForward" />
          <AitFeature Name="Windows.UI.Xaml.Controls.Frame.Navigate" />
          <AitFeature Name="Windows.UI.Xaml.Controls.Frame.SetNavigationState" />
          <AitFeature Name="Windows.UI.Xaml.Controls.Frame.get_BackStackDepth" />
          <AitFeature Name="Windows.UI.Xaml.Controls.Frame.get_CanGoBack" />
          <AitFeature Name="Windows.UI.Xaml.Controls.Frame.get_CanGoForward" />
          <AitFeature Name="Windows.UI.Xaml.Controls.MediaElement" />
          <AitFeature Name="Windows.UI.Xaml.Controls.MediaElement.Pause" />
          <AitFeature Name="Windows.UI.Xaml.Controls.MediaElement.Play" />
          <AitFeature Name="Windows.UI.Xaml.Controls.MediaElement.Stop" />
          <AitFeature Name="Windows.UI.Xaml.Controls.MediaElement.get_CanPause" />
          <AitFeature Name="Windows.UI.Xaml.Controls.MediaElement.put_Volume" />
          <AitFeature Name="Windows.UI.Xaml.Controls.Page" />
          <AitFeature Name="Windows.UI.Xaml.Controls.Page..ctor" />
          <AitFeature Name="Windows.UI.Xaml.Controls.Page.get_Frame" />
          <AitFeature Name="Windows.UI.Xaml.Controls.Panel" />
          <AitFeature Name="Windows.UI.Xaml.Controls.Panel..ctor" />
          <AitFeature Name="Windows.UI.Xaml.Controls.Panel.get_Children" />
          <AitFeature Name="Windows.UI.Xaml.Controls.RichTextBlock" />
          <AitFeature Name="Windows.UI.Xaml.Controls.RichTextBlock.get_HasOverflowContent" />
          <AitFeature Name="Windows.UI.Xaml.Controls.RichTextBlock.put_OverflowContentTarget" />
          <AitFeature Name="Windows.UI.Xaml.Controls.RichTextBlockOverflow" />
          <AitFeature Name="Windows.UI.Xaml.Controls.RichTextBlockOverflow.get_HasOverflowContent" />
          <AitFeature Name="Windows.UI.Xaml.Controls.RichTextBlockOverflow.put_OverflowContentTarget" />
          <AitFeature Name="Windows.UI.Xaml.Controls.Slider" />
          <AitFeature Name="Windows.UI.Xaml.Controls.TextBlock" />
          <AitFeature Name="Windows.UI.Xaml.Controls.UIElementCollection" />
          <AitFeature Name="Windows.UI.Xaml.Controls.UserControl" />
          <AitFeature Name="Windows.UI.Xaml.Controls.Primitives.ButtonBase" />
          <AitFeature Name="Windows.UI.Xaml.Controls.Primitives.ButtonBase.add_Click" />
          <AitFeature Name="Windows.UI.Xaml.Controls.Primitives.ButtonBase.remove_Click" />
          <AitFeature Name="Windows.UI.Xaml.Controls.Primitives.ComponentResourceLocation" />
          <AitFeature Name="Windows.UI.Xaml.Controls.Primitives.RangeBase" />
          <AitFeature Name="Windows.UI.Xaml.Controls.Primitives.RangeBase.add_ValueChanged" />
          <AitFeature Name="Windows.UI.Xaml.Controls.Primitives.RangeBase.get_Value" />
          <AitFeature Name="Windows.UI.Xaml.Controls.Primitives.RangeBase.remove_ValueChanged" />
          <AitFeature Name="Windows.UI.Xaml.Controls.Primitives.RangeBaseValueChangedEventArgs" />
          <AitFeature Name="Windows.UI.Xaml.Controls.Primitives.RangeBaseValueChangedEventHandler" />
          <AitFeature Name="Windows.UI.Xaml.Controls.Primitives.RangeBaseValueChangedEventHandler..ctor" />
          <AitFeature Name="Windows.UI.Xaml.Data.IValueConverter" />
          <AitFeature Name="Windows.UI.Xaml.Data.IValueConverter.Convert" />
          <AitFeature Name="Windows.UI.Xaml.Data.IValueConverter.ConvertBack" />
          <AitFeature Name="Windows.UI.Xaml.Markup.ContentPropertyAttribute" />
          <AitFeature Name="Windows.UI.Xaml.Markup.ContentPropertyAttribute..ctor" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IComponentConnector" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IComponentConnector.Connect" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IXamlMember" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IXamlMember.GetValue" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IXamlMember.SetValue" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IXamlMember.get_IsAttachable" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IXamlMember.get_IsDependencyProperty" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IXamlMember.get_IsReadOnly" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IXamlMember.get_Name" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IXamlMember.get_TargetType" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IXamlMember.get_Type" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IXamlMetadataProvider" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IXamlMetadataProvider.GetXamlType" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IXamlMetadataProvider.GetXmlnsDefinitions" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IXamlType" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IXamlType.ActivateInstance" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IXamlType.AddToMap" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IXamlType.AddToVector" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IXamlType.CreateFromString" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IXamlType.GetMember" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IXamlType.RunInitializer" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IXamlType.get_BaseType" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IXamlType.get_ContentProperty" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IXamlType.get_FullName" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IXamlType.get_IsArray" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IXamlType.get_IsBindable" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IXamlType.get_IsCollection" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IXamlType.get_IsConstructible" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IXamlType.get_IsDictionary" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IXamlType.get_IsMarkupExtension" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IXamlType.get_ItemType" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IXamlType.get_KeyType" />
          <AitFeature Name="Windows.UI.Xaml.Markup.IXamlType.get_UnderlyingType" />
          <AitFeature Name="Windows.UI.Xaml.Markup.XmlnsDefinition" />
          <AitFeature Name="Windows.UI.Xaml.Navigation.NavigationEventArgs" />
          <AitFeature Name="Windows.UI.Xaml.Navigation.NavigationEventArgs.get_NavigationMode" />
          <AitFeature Name="Windows.UI.Xaml.Navigation.NavigationEventArgs.get_Parameter" />
          <AitFeature Name="Windows.UI.Xaml.Navigation.NavigationMode" />
        </AitCategory>
      </AitFile>
    </AitStaticAnalysis>
  </DEPENDENCY_INFORMATION>
</REPORT>

Getting Your App on the Windows 8 Store

You cannot celebrate that your app has passed the tests and publish your app immediately. No, you'll have to review our application requirements again, and make sure you understand the criteria of the App Developer Agreement. Once you are 100% satisfied that you meet the requirements, you need to open a Windows Store Developer Account (for this you will need a Microsoft account).

You'll also need to choose and reserve your application's name; decide on its age rating, and even the business model! Importantly, you'll have to choose in which countries you will sell your application, and finally write a good description of your application.

After all of this, you will be ready to publish your application to the Windows 8 Store

The very first time doing all of this will feel just like a baptism of fire, but with all things, you'll learn and get used to it, so that in no time, you have many apps on the Windows  8 Store.

Monetizing Your Windows 8 Store Applications

You could follow these guidelines:

  1. Take your app to market
  2. Plan for monetization (Windows Store apps)
  3. Windows Store app marketing guidelines

Registering a Windows 8 Store Account

After everything, you still need to get your app on the Windows 8 Store. Now how do you do this? Well, you'd need to register for a Windows 8 Store developer account. Do this by clicking here. This will bring you to a screen similar to Figure 11.

Purchase info
Figure 11 - Purchase info

I do have an MSDN subscription, so that is why my account is free for an entire year!

The next screen will ask you to verify your payment information.

Verify Payment
Figure 12 - Verify Payment

Almost done. The next screen will thank you for the purchase, and allow you to set up a Paypal account (in case you have made an app that will bring in revenue - as explained in the previous section "Monetizing your applications").

Thank You
Figure 12 - Thank You

The last screen will take you to your Dashboard. You will not notice any of your Windows 8 Store applications here yet, as you first need to confirm your payment verification. This is done by obtaining a statement from your credit card, and supplying Microsoft with the three digit code here.

Done.

Conclusion

There you have it! We learned how easy it is to add videos to your Windows 8 Store applications with the use of MediaElement. We also learned all the intricacies concerning Windows 8 Store Application development. I hope my article was useful, and will remain useful for a long time. The onus is now on you to go through all the links and details I have supplied to ensure great Windows 8 Store application development! Until next time, cheers!



Related Articles

Comments

  • There are no comments yet. Be the first to comment!

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • The explosion in mobile devices and applications has generated a great deal of interest in APIs. Today's businesses are under increased pressure to make it easy to build apps, supply tools to help developers work more quickly, and deploy operational analytics so they can track users, developers, application performance, and more. Apigee Edge provides comprehensive API delivery tools and both operational and business-level analytics in an integrated platform. It is available as on-premise software or through …

  • Historically, IT investments were made simply in the interest of increasing competitiveness and with little insight into the hard, fact-based financial case. As organizations worldwide have been forced to tighten belts and slash budgets, management increasingly require financial evidence for sound IT purchases that fully align with business goals and strategies. This webinar defines and describes total cost of ownership - an important metric for assessing and tracking the risks, costs, and benefits of …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds