Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Ultrabook Development My Way

0.00/5 (No votes)
9 Jan 2013 1  
In depth details of an Ultrabook

What is an Ultrabook?

Ultrabook is not a normal Laptop that you will have in your kitty. It is Lightweight high performance oriented i7 architecture based, high battery life optimized (up to 8hrs) advanced notebook and adding Ultra features to call it an ULtrabook. The figure below shows the the features of an Ultrabook(Intel Prototype)  

Description 

I7 Intel Ivy Bridge Processor. It is the latest series of processors of Intel which is very fast and consumes less power faster processing ability better cache memories (starting from 3MB Cache.)






Generations of Ultrabook

 

Ultrabook Essential Features

Architecture includes support for Intel HD Graphics

Support for DX11, Open GL 3.1, Open CL 3.1

Full Support for Intel Perceptual SDK 2013 (additional  gesture camera needed)and Intel Parallel Computing SDK

Win8 full touch enabled support (The best OS to test the capability of Ultrabook is Windows 8 as with OS you can use each functionality to its full potential….)

SENSORS SUPPORTED

  1. Accelerometer
  2. Magnetometer
  3. Gyro meter 
  4. Orientation Sensor
  5. Ambient Light Sensor
  6. NFC (Near Field Communication)
  7. GPS

Special Intel Technologies

  1. Intel Smart Connect
  2. Rapid Start
  3. Sensor Hub

Developing for an Ultrabook

Supportive OS: In my case it is Windows 8

Designing and Development Tools: VS 2012

The next Figure shows the available stores where you can submit the app 

 

 

First of all how to start development?

For Intel AppUp Store you need to have an account at Intel Developer Zone

1) How to Setup account at Intel Developer Zone 

The next figure shows how to register at IDZ 

 

Fill up the entire details name and the required Information.

The next figure shows how it can be done. 

As you register you need to add organization (Try to Register yourself as an Individual) 

details etc. And when you set up your account You need to click on the Dashboard and then go to Intel AppUp and request for Code Signing Certificate.

The figures below show the steps. 

 

 

The next two figures show how to apply for Code Signing Certificate

 

 

 

The second Figure takes you the Comodo Link 

 

What is a Code Signing Certificate?

It is an authentication method by which you digitally sign the software and comprehends that the software has not been corrupted and written by original author. It is a mandatory step to put any app to IntelAppUp Store.  

Registration process

This registration process is generally a lengthy and painstaking one,you need to do a follow up and try contacting them(Comodo Team) when you create an ID at Comodo keep chatting to their agents to expedite the issue. Beforehand you need to have the documents 1) ID Proof, Address Proof 2) Bank Statement 3) Registering yourself to any of the Yellow Pages website that they will mention and they will confirm by calling you. (But you can have an easy workaround if you keep pushing them in the Comodo Chat Helpdesk.)

 

The next figure shows the step to register at Comodo

 

If you get an error like member not found try it at Win XP (firstly I also got this error but trying the process in Win XP resolved the issue)

 

 

There is already a document to show how to get the certificate ,the link is shown below

The Video Link shows how tos to put your app in store

 

Getting an account at Windows Store

1)first things first it’s a paid service

2)The link to have an account at Windows Store is given below http://msdn.microsoft.com/en-in/library/windows/apps/hh868187.aspx

Follow and study the webpage to get an account. 

Its a very easy process to get an account and their are certain promo offers, Microsoft is providing to get a free account.More Ready information is available here

Developing for an Ultrabook

1)Download Win 8 evaluation copy to start with(I did my development work this way) It’s a 90 days evaluation copy

Link  

2) Get a free copy of Visual Studio 2012 express edition

Download the 90 days evaluation copy of Ultimate version

3)If you are Developing Windows Store app you need to get a Developer License(Developer License is free and after expiry you can request again…and Developer License requirement is prompted when you open up a windows store project template)

 

4) My application was Desktop based so I started this way…..Figuratively shown below. From the Win 8 main screen select VS 2012

Intel App Up Store Validation process

 

Application Packaging

The packaging of the app can be done in 3 ways(as of I know) 1)InstallShield(I used InstallShield) 2)WixToolset 3)Application Installer(The only concern using it is you have to edit unnecessary files using ORCA)

You need to do certain things before uploading your application

1)Creating the App icon

2)Screenshots of the app

What is Intel AppUp SDK?

Intel AppUp SDK(I havenot used it but providing information of it)

Intel AppUp SDK contains Api for applications sold in Intel App Up Store.It is not essential to use it in Windows based systems but it helps you in these areas.

1)Multiple Device Digital management

2)Crash reporting

3)instrumentation and in app purchase capabilities. It helps generally if you want to upload an evaluation copy and then on if any full version is required upgradation steps are easy

Intel AppUp SDK services Support shown below  

 

 

Programming Languages and Platform Support for Intel AppUp SDK shown below 

 

 

 

My App Development Process

UltraSensors 1.0

The idea behind this application was to use multi functionality testing conditions for an Ultrabook.

I thought of checking all the sensors supported in Ultrabook embedded within a single condition

Involving looping construct to check available sensors. Next was in my mind to check the Battery limits of an Ultrabook (as it was said Ultrabook has great battery Life) and thirdly a condition to check the Carbon Footprint of an Individual involving their daily usage in Household, Transportation etc.

Creating the Application

I used win forms as frontend and C# at backend to develop my software.At the starting of my project I had little information on how to compile and create the package, it was a challenge to me.First of all the the full utility of Ultrabook can be tested or showcased by the Windows 8 OS because of its ability to use Sensors in the application.My obvious choice of IDE was VS2012 as it is very easy to use and package the app.The Installshield Deployment packaging tool was easy enough to put the VS 2012 solution to Intel AppUp Store.

 

How to Call WinRT APIs from Desktop Application

Before starting to build in the Form Requirement

1)You need to unload the project

2)Edit the properties

3)You need to add a Property Group then change the Target Platform

8.0

The Core Windows 8 tab inside VS 2012

It allows access to the current Windows 8 platform version and use the Core UI for the Development environment

Important Namespaces to get used to for Ultrabook Development with Win 8

  1. System.Runtime
  2. System.Runtime.InteropServices.WindowsRuntime
  3. Windows.Device.Sensors(The most important namespace to access the Sensors)
  4. Windows.UI

You can access this namespaces by adding references to this through your project by using add references tab

The figure below shows how to access VS 2012 from the Main Window of Windows 8.As we all know that when we install any application in Win 8 the shortcut is directly relected as a tile at Main Screen of Windows 8 because of its UI!!(New Thing).

   

The next figure shows how to start a new project at Visual Studio 2012

   

The next figure shows the default templates to develop an app for Windows Store.

   

The figure below shows the templates available to develop an app for Desktop Based Application

   

As my Development target was .net Forms I selected the Form based application terget to .net framework 4.5

   

The Consecutive figures below shows you how to add additional forms to your application

 

 

The Main Form(The Starting Form)

The Main form consists of three Buttons that access other forms of the application and a < close button.As per my Discussion with Praveen From Intel he said that the application should open in Full screen and closes the application with a single click(closes al forms).

Using properties of the main form I kept the Windows to maximized state so that the application open up in full Screen and using System.Environment.Exit button to close the application.Accessing the next form page from the main screen :- It is easy just in one of the buttons backend call the next form.

FormName sv= new FormName();
sv.ShowDialog();

The figure below shows the button controls used and the first page UI Form.The back end code is updated with it.

   

The First form Code

//
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Devices.Sensors;
using Windows.UI;

namespace DeskmanGoGreen5
{
    public partial class Form1 : Form
    {
        private Accelerometer ag;
        private LightSensor la;
        private SimpleOrientationSensor so;
        private OrientationSensor os;
        private Inclinometer ic;
        private Compass cs;
        private Gyrometer gy;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ag = Accelerometer.GetDefault();
            la = LightSensor.GetDefault();
            so = SimpleOrientationSensor.GetDefault();
            os = OrientationSensor.GetDefault();
            ic = Inclinometer.GetDefault();
            cs = Compass.GetDefault();
            gy = Gyrometer.GetDefault();

            if (ag != null)
            {
                MessageBox.Show("Accelerometer found");

            }
            else
            {
                MessageBox.Show("No Accelerometer not found");
            }
            if (la != null)
            {
                MessageBox.Show("Ambient Light Sensor found");
            }
            else
            {
                MessageBox.Show("No Ambient Light Sensor found");
            }
            if (so != null)
            {
                MessageBox.Show("Simple Orientation Sensor found");
            }
            else
            {
                MessageBox.Show("Simple Orientation Sensor not found");
            }
            if (os != null)
            {
                MessageBox.Show("orientation Sensor found");
            }
            else
            {
                MessageBox.Show("orientation Sensor not found");
            }
            if (ic != null)
            {
                MessageBox.Show("Inclinometer Sensor found");
            }
            else
            {
                MessageBox.Show("Inclinometer Sensor not found");
            }
            if (cs != null)
            {
                MessageBox.Show("Compass found");
            }
            else
            {
                MessageBox.Show("Compass not found");
            }
            if (gy != null)
            {
                MessageBox.Show("Gyrometer found");

            }
            else
            {
                MessageBox.Show("Gyrometer not found");
            }

        }

        private void button2_Click(object sender, EventArgs e)
        {
            BatteryMonitorForm bm = new BatteryMonitorForm();
            bm.ShowDialog();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            System.Environment.Exit(0);
        }
    }
}
//

The Image is shown below.

The Way to maximize the windows size.

 

Battery Monitor Form 

The battery Monitor form included a check box to indicate that the main power is connected, a status bar to indicate the percentage of charge remaining and a label control to access the Ambient light sensor when it goes to 35%.The form also included timer to refresh the data periodically.

The next Figure shows the UI for the BatteryMonitorForm

   

//
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime;
using System.Runtime.InteropServices;
using Windows.Devices.Sensors;
using Windows.UI;


namespace DeskmanGoGreen5
{
    public partial class BatteryMonitorForm : Form
    {
        private LightSensorReading _lux;
        public BatteryMonitorForm()
        {
            InitializeComponent();
        }
        private void RefreshStatus()
        {
            PowerStatus power = SystemInformation.PowerStatus;

            // Show the main power status
            switch (power.PowerLineStatus)
            {
                case PowerLineStatus.Online:
                    MainsPower.Checked = true;
                    break;

                case PowerLineStatus.Offline:
                    MainsPower.Checked = false;
                    break;

                case PowerLineStatus.Unknown:
                    MainsPower.CheckState = CheckState.Indeterminate;
                    break;
            }
            int powerPercent = (int)(power.BatteryLifePercent * 100);
            if (powerPercent <= 100)
                BatteryIndicator.Value = powerPercent;

            else if (powerPercent <= 35)
            {
                LightSensor ls = LightSensor.GetDefault();
                {
                    if (ls != null)
                    {
                        ls.ReportInterval = 0;
                        ls.ReadingChanged += ls_ReadingChanged;
                        LightLux.Text = _lux.IlluminanceInLux.ToString("0000");


                    }
                }
            }
            else
                BatteryIndicator.Value = 0;
            // Battery Remaining
            int secondsRemaining = power.BatteryLifeRemaining;
            if (secondsRemaining >= 0)
            {
                BatteryLifeRemaining.Text = string.Format("{0} min", secondsRemaining / 60);
            }
            else
            {
                BatteryLifeRemaining.Text = string.Empty;
            }
            // Battery Status
            BatteryStatus.Text = power.BatteryChargeStatus.ToString();
        }

        void ls_ReadingChanged(LightSensor sender, LightSensorReadingChangedEventArgs args)
        {
          
                MessageBox.Show("Light Sensor enabled");
        }
//

Carbon Footprint Calculator form

Here I used text box controls as well as labels to access the data. The tab controls are used to package the flow accordingly. The calculations for the application is provided by EPA and used as formulas. //
//
3rd form
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace DeskmanGoGreen5
{
    public partial class CarbonFootPrintCalculator : Form
    {
        double electricitybill;
        double priceperkillowatt = .20;
        double electricityemissonfactor = 1.37;
        int monthsinyear;
        int monthsinyr1;
        int monthsinyr2;
        double co2emissions;
        double co2emissions1;
        double co2emissions2;
        double co2emissions3;
        double co2emissions4;
        double co2emissions5;
        double co2emissions6;
        double amountofnaturalgasbill;
        double priceperthousandcubicfeet = 14.14;
        double naturalgasemissionfactor = 120.61;
        double amountoffuelbill;
        double pricepergallon = 2.88;
        double fueloilemissionfactor = 22.37;
        double amountofmilesdrvnweek;
        double amountofpropanebill;
        double pricepergallonp = 2.76;
        double propaneemissionfactor = 12.17;
        int weeksinyr;
        double pondofco2emtdprgln = 19.4;
        double emsnotrco2 = 1.0526;
        double fuelefficncyprvcl;
        double milestrvlpbprwk;
        double pblctrnsprtndemsn = 19.4;
        double indrtemsn = 1.052;
        double grm2pndcnvrsn = .0022;
        int airemisnspermile = 223;
        double indwtpf = 1.2;
        double iarff = 1.9;
        double gram2pc = .0022;
        double airmilestravld;
        int monthsinyr3;
        public CarbonFootPrintCalculator()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            electricitybill = double.Parse(textBox1.Text);
            monthsinyear = int.Parse(textBox2.Text);
            co2emissions = (electricitybill / priceperkillowatt) * electricityemissonfactor * monthsinyear;

        }

        private void button2_Click(object sender, EventArgs e)
        {
            MessageBox.Show(co2emissions + "Carbon emission in Pounds", "co2emissions");

        }

        private void button3_Click(object sender, EventArgs e)
        {
            amountofnaturalgasbill = double.Parse(textBox3.Text);
            monthsinyr1 = int.Parse(textBox4.Text);
            co2emissions1 = ((amountofnaturalgasbill / priceperthousandcubicfeet) * naturalgasemissionfactor) * monthsinyr1;

        }

        private void button4_Click(object sender, EventArgs e)
        {
            MessageBox.Show(co2emissions1 + "Carbon Emission in pounds", "co2emissions1");

        }

        private void button5_Click(object sender, EventArgs e)
        {
            amountoffuelbill = double.Parse(textBox5.Text);
            monthsinyr2 = int.Parse(textBox6.Text);
            co2emissions2 = ((amountoffuelbill / pricepergallon) * fueloilemissionfactor) * monthsinyr2;


        }

        private void button6_Click(object sender, EventArgs e)
        {
            MessageBox.Show(co2emissions2 + "Carbon emissions in pounds", "co2emissions2");

        }

        private void button7_Click(object sender, EventArgs e)
        {
            amountofpropanebill = double.Parse(textBox7.Text);
            monthsinyr2 = int.Parse(textBox8.Text);
            co2emissions3 = ((amountofpropanebill / pricepergallonp) * propaneemissionfactor) * monthsinyr2;

        }

        private void button8_Click(object sender, EventArgs e)
        {
            MessageBox.Show(co2emissions3 + "Carbon emissions in pounds", "co2emissions3");

        }

        private void button9_Click(object sender, EventArgs e)
        {
            amountofmilesdrvnweek = double.Parse(textBox9.Text);
            weeksinyr = int.Parse(textBox10.Text);
            fuelefficncyprvcl = double.Parse(textBox11.Text);
            co2emissions4 = ((amountofmilesdrvnweek * weeksinyr) / fuelefficncyprvcl) * pondofco2emtdprgln * emsnotrco2;

        }

        private void button10_Click(object sender, EventArgs e)
        {
            MessageBox.Show(co2emissions4 + "Carbon emissions in pounds", "co2emissions4");

        }

        private void button11_Click(object sender, EventArgs e)
        {
            milestrvlpbprwk = double.Parse(textBox12.Text);
            co2emissions5 = (milestrvlpbprwk * pblctrnsprtndemsn) + (pblctrnsprtndemsn * indrtemsn * grm2pndcnvrsn);


        }

        private void button12_Click(object sender, EventArgs e)
        {
            MessageBox.Show(co2emissions5 + "Carbon emission in pounds", "co2emissions5");

        }

        private void RefreshTimer_Tick(object sender, EventArgs e)
        {
            RefreshStatus();

        }

        private void BatteryMonitorForm_Load(object sender, EventArgs e)
        {
            RefreshStatus();
            RefreshTimer.Enabled = true;

        }

The Figure shows the the screenshot

 

My Next Application Ultra Knowhow features

1) Getting Default Values of Sensors and Showing it using Label controls. Here I used four sensor Values and and the next form to get some essential knowhows of Ultrabook.Like Home directory,windows version ,No of cores in processor,Logical Drives,windows Directory,username & Computer name.The usage of array in the form helped me get access to HomeDir,UserName,ComputerName and WinDir.
//
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace UltraKnowHow
{
    public partial class UltraknowHow : Form
    {
        public UltraknowHow()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string[] variables =
            {
                "%WINDIR%" ,
                "%HOMEDRIVE%",
                "%USERNAME%",
                "%COMPUTERNAME%"
            };
            foreach (string v in variables)
            {
                string result = Environment.ExpandEnvironmentVariables(v);
                MessageBox.Show(result);
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            string[] value1 = Environment.GetLogicalDrives();
            MessageBox.Show(string.Join(",", value1));
        }

        private void button3_Click(object sender, EventArgs e)
        {
            OperatingSystem os = Environment.OSVersion;
            MessageBox.Show("OS Version= "+Environment.OSVersion.Version.ToString() +"\n");
        }

        private void button4_Click(object sender, EventArgs e)
        {
            MessageBox.Show("No of Cores=" + Environment.ProcessorCount.ToString() + "\n");
        }

        private void button5_Click(object sender, EventArgs e)
        {
            MessageBox.Show("CLR Version=" + Environment.Version.ToString() + "\n");
        }

        private void button6_Click(object sender, EventArgs e)
        {
            MessageBox.Show("OS Major Minor=" + Environment.OSVersion.Platform);
        }

        private void button7_Click(object sender, EventArgs e)
        {
            System.Environment.Exit(0);

        }
    }
}
The next Code utilizes Label control to access the Sensors API
//
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Devices.Sensors;
using Windows.UI;
using Windows.UI.Core;

namespace UltraKnowHow
{
    public partial class SensorValues : Form
    {
        private AccelerometerReading _acc;
        private Accelerometer _accelerometer;
        private LightSensor _sensor;
        private LightSensorReading _senr;
        private Gyrometer _gyrometer;
        private GyrometerReading _gyro;
        private Inclinometer _inclinometer;
        private InclinometerReading _inc;
        private OrientationSensor _orientationSensor;
        private OrientationSensorReading _orient;
        //private SensorQuaternion _SQ;
        //private SensorRotationMatrix _SR;
        public SensorValues()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (_accelerometer != null)
            {
                // Only change events are fired, so get an initial value.
                if (_acc == null)
                    _acc = _accelerometer.GetCurrentReading();
                else
                {
                    AccX.Text = _acc.AccelerationX.ToString("0.000");
                    AccY.Text = _acc.AccelerationY.ToString("0.000");
                    AccZ.Text = _acc.AccelerationZ.ToString("0.000");
                }
            }

        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (_gyrometer != null)
            {
                if (_gyro == null)
                    _gyro = _gyrometer.GetCurrentReading();
                else
                {
                    AngvX.Text = _gyro.AngularVelocityX.ToString("0.00");
                    AngvY.Text = _gyro.AngularVelocityY.ToString("0.00");
                    AngvZ.Text = _gyro.AngularVelocityZ.ToString("0.00");
                }
            }

        }

        private void button5_Click(object sender, EventArgs e)
        {
            if (_sensor != null)
            {
                if (_senr == null)
                    _senr = _sensor.GetCurrentReading();
                else
                {
                    Lux.Text = _senr.IlluminanceInLux.ToString("0.000");
                }
            }
           


        }

        private void SensorValues_Load(object sender, EventArgs e)
        {
            _accelerometer = Accelerometer.GetDefault();
            if (_accelerometer == null)
            {
                MessageBox.Show("Accelerometer Currently unavailable");
                //DisableButton();

            }
            else
            {
                MessageBox.Show("Accelerometer Found and Initiated");
            }
            _sensor = LightSensor.GetDefault();
            if (_sensor == null)
            {
                MessageBox.Show("Ambient Light Sensor unavailable");

            }
            else
            {
                MessageBox.Show("Ambient Light Sensor Found and Initiated");
            }
            _gyrometer = Gyrometer.GetDefault();
            if (_gyrometer == null)
            {
                MessageBox.Show("Gyrometer Currently unavailable");
            }
            else
            {
                MessageBox.Show("Gyrometer Found and initiated");
            }
            _inclinometer = Inclinometer.GetDefault();
            if (_inclinometer == null)
            {
                MessageBox.Show("Inclinometer Currently unavailable");
            }
            else
            {
                MessageBox.Show("Inclinometer Sensor Found");
            }
            _orientationSensor = OrientationSensor.GetDefault();
            if(_orientationSensor==null)
            {
                MessageBox.Show("Orientation Sensor unavailable");
            }
            else
            {
                MessageBox.Show("Orientation Sensor Found");
            }

        }

        private void button3_Click(object sender, EventArgs e)
        {
            if(_inclinometer !=null)
            {
                if (_inc == null)
                {
                    _inc = _inclinometer.GetCurrentReading();
                }
                else
                {
                    PD.Text = _inc.PitchDegrees.ToString("0.00");
                    RD.Text = _inc.RollDegrees.ToString("0.00");
                    YawD.Text = _inc.YawDegrees.ToString("0.00");
                }

            }


        }

        private void button4_Click(object sender, EventArgs e)
        {
            if (_orientationSensor != null)
            {
                if (_orient == null)
                {
                    _orient = _orientationSensor.GetCurrentReading();
                }
                else
                {
                    label14.Text = _orient.Quaternion.W.ToString("0.00");
                    label15.Text = _orient.Quaternion.X.ToString("0.00");
                    label16.Text = _orient.Quaternion.Y.ToString("0.00");
                    label17.Text = _orient.Quaternion.Z.ToString("0.00");

                    RotM11.Text = _orient.RotationMatrix.M11.ToString("0.00");
                    RotM12.Text = _orient.RotationMatrix.M12.ToString("0.00");
                    RotM13.Text = _orient.RotationMatrix.M13.ToString("0.00");
                    RotM21.Text = _orient.RotationMatrix.M21.ToString("0.00");
                    RotM22.Text = _orient.RotationMatrix.M22.ToString("0.00");
                    RotM23.Text = _orient.RotationMatrix.M23.ToString("0.00");
                    RotM31.Text = _orient.RotationMatrix.M31.ToString("0.00");
                    RotM32.Text = _orient.RotationMatrix.M32.ToString("0.00");
                    RotM33.Text = _orient.RotationMatrix.M33.ToString("0.00");
                
                }
            }

        }

        private void button6_Click(object sender, EventArgs e)
        {
            UltraknowHow un = new UltraknowHow();
            un.ShowDialog();
        }

        private void button7_Click(object sender, EventArgs e)
        {
            System.Environment.Exit(0);
        }
    }
}

The figures below shows the Form View

 

 

Packaging the application

I used Installshield to package my application.When you run the project for the first time it creates a VS solution file.Now you will have to use this solution file to create the exe or the installer.You need to click on new project and then go to other project types,setup and deployment.Click on Install Shield Limited edition project,give a name.Right click on solution project.add existing project,select the VS solution file to add the project an use project assistant to complete the wizard.Specify application information.

The figure shown below how to start InstallShield and further package the app

 

The Figures below shows the way to compile the exe with the InstallShield packaging option

 

Just mention the application requirements to your liking.Here you can mention the project dependency such as which framework is required?targeting which OS etc

 

Add project files and folders.Add the the solution file and important dpendency files to your project susch as DLL files,then the app image that will put up when your app is installed etc.

 

The next figure shows the InstallShield wizard in its final phase

 

You can skip the last two steps and then build the solution.A setup file will be created, I used the exe to upload my app to Intel App Up Store. Now the most important thing you need to digitally sign the exe before uploading.Itis the most important step because without this your app will not be accepted.Use MSI Tool utility to sign the app.

 

The next figure show how to sign the app with the MSI Tool

 

The figure below shows how the Digital Signature file looks like.Its a *.pfx file

 

Things to remember

1) Make sure you make the initial arrangements to make the project file compatible to use the Core Windows 8 files

2) Keep in mind the application Lifecycle of Windows 8 app.The app starts very fast and when not in use runs at background. So the ideal way of development would be to use a thread for the entire lifecycle so that your app is very stable(I have not used any Thread in my Development still learning about it).

Use The new keyword ASYNC and AWAIT to its full potential.Life will be more easy with it.Explore and Enjoy. Remember when you experiment Failure is the Key to success.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here