WindowsCE – deploying to the device

A very quick blog on some pointers when deploying your .NET Compact Framework application to a device.

Assuming that you’ve got your windows mobile application built.  And it runs in the virtual emulator shipped with VS.NET.  What’s next?

  1. Connect your device (PDA, hand-held, smart phone…)
  2. If you can not connect, you will need either Active Sync, or Windows Mobile Device center
    Grab it here: http://www.microsoft.com/downloads/details.aspx?FamilyId=4F68EB56-7825-43B2-AC89-2030ED98ED95&displaylang=en
  3. Once you can connect – check in VS.NET to see that VS.NET can connect to the device.  You may be prompted on the device about several installation and whether to trust a few files.
  4. Verify and accept them.  Then you should be able to deploy and debug the application on your WindowsCE

 

Next step – how do I add a short cut link to my application?

VS.NET will typically deploy the application to \Program Files\<Project Name>\<Assembly Executable Name>

You can change these settings in the application project properties.

To add a shortcut:

  1. You can’t create short cut within Windows CE. 
  2. Create a plain text file called <My App>.lnk
  3. Open the text file with notepad
  4. the format is <length>#<path to exe as well as arguments>
    e.g.
    28#”\Program Files\App\App.exe”
  5. 35#”\Program Files\App\App.exe” “mydb”
  6. save the text file to \Windows\Startup\Programs

Windows CE – building a transparent picturebox

Surprise!  PictureBox in Windows CE doesn’t support transparency.

Diving into yet another old forgotten corner of the .NET compact framework.

And just in case the mention of Compact Framework hasn’t scared you to death, today’s code will be in Visual Basic .NET

 

Imports System.Drawing.Imaging
Imports System.ComponentModel

Public Class TransparentPictureBox
    Inherits PictureBox

    Private _transparentColor As Color = Color.White
    Public Property TransparentColor() As Color
        Get
            Return _transparentColor
        End Get
        Set(ByVal value As Color)
            _transparentColor = value
        End Set
    End Property

    Protected Overloads Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)

        If Not Me.Image Is Nothing Then
            Dim pictureBounds As New Rectangle(0, 0, Me.Width, Me.Height)
            Dim imageBounds As New Rectangle(0, 0, Me.Image.Width, Me.Image.Height)
            Dim attributes As New ImageAttributes()
            ' set color to be set to transparent - if you don't paint the background below, then these pixels
            ' will appear black
            attributes.SetColorKey(Me.TransparentColor, Me.TransparentColor)
            e.Graphics.DrawImage(Me.Image, pictureBounds, imageBounds.X, imageBounds.Y, imageBounds.Width, imageBounds.Height, GraphicsUnit.Pixel, attributes)
        End If

    End Sub

    Protected Overloads Overrides Sub OnPaintBackground(ByVal e As System.Windows.Forms.PaintEventArgs)
        ' paint background color
        Dim brush As SolidBrush
        brush = New SolidBrush(Me.Parent.BackColor)
        e.Graphics.FillRectangle(brush, Me.ClientRectangle)
    End Sub

End Class

SharePoint 2010 – renaming features and web parts in VS.NET 2010 SharePoint Solutions

 

  1. In solution, select the Feature

    clip_image002

    Change the “Folder Name” property to new name. Press Enter – VS.NET will try to help you rename everything correctly.  The reason this field is called “Folder Name” is because SharePoint packaged solutions are deployed to the 14 HIVE, and are organized by folders there.
    Double click on the feature to bring up the Feature designer UI, you still need to change the Title and Description

    clip_image004
  2. To rename the web part

    clip_image006

    Change the Folder Name
    You still need to change the actual UserControl file name

    clip_image008

    As well as the user control filename, class name… standard .NET stuff.  Some tools such as VS.NET’s rename tool, or if you use Resharper, can help you with class renaming.
  3. WARNING: generally renaming packages is very bad after you have deployed to production. This should not be done lightly. 

SharePoint 2010 and Silverlight

Was working on a presentation on SharePoint 2010 and Silverlight.

Finally, I get to marry my two favourite technologies in one awesome demo.

 

There’s not a lot of people blogging about this yet, but what we were digging up was very delightful.

In bullet point form – because this is a brain dump blog post, and if you want to know how everything ties together you’ll have to catch up to one of the user groups where I present this stuff (or Adam Cogan… he gets around a lot more than me):

Technologies that made it possible:

  • SharePoint web services
  • SharePoint REST / OData services NEW
    • This is actually great news for the AJAX / JavaScript crowd.  Technically, you can write JQuery solutions that will query SharePoint for you.
  • Microsoft.SharePoint.Client.dll(s), and the corresponding Microsoft.SharePoint.Client.Silverlight.dll(s) – which are awesome wrappers
  • CAML is nearly gone, but still lingers on for huge data processing.
  • LINQ to SharePoint is the new crafting knife
  • Silverlight XAP files can be uploaded anywhere
  • Silverlight web part can load XAP files and run them
    • So a user that can upload a short movie to SharePoint, then configure a Silverlight movie player to play that movie… already has the permissions required to run custom XAP applications.
  • Which, if you stop and think about it, is a “different” deployment model!

ASP.NET "5.7.1 Unable to relay for email" when SmtpClient.UseDefaultCredentials = true

 

Was looking at a problem with Andy regarding using SmtpClient.UserDefaultCredentials = true, and sending emails within an authenticated WCF service.

We can send emails within the domain without any issues, but when sending emails outside of the domain the mail server rejects us with the 5.7.1 Unable to relay for [email protected]

The easier fix would probably be to UseDefaultCredentials = false, and specify a NetworkCredential(username,password).  But we were stubborn and didn’t want to have to enter a email address somewhere in the web.config.

While investigating – we realized that if we specify the mail server by IP address instead of DNS name – then the email will be delivered.

 

Our suspicions are that the Exchange mail server has different rule sets to decide if it trusts the source to be somewhere local.  If the IP address specified is a local network IP – it seems to relax the relay rules somewhat.