A common approach for programmatically creating a shortcut to a ClickOnce application is to copy the “Application Reference” (*.appref-ms) file that was created in the user’s start menu when the application was installed.
The following function will create a ClickOnce Application Shortcut (*.appref-ms) file for the currently running ClickOnce application without coping the file that exists in the user’s start menu:
''' <summary>
''' Creates a ClickOnce application reference (*.appref-ms) file for the
''' currently running ClickOnce application.
''' </summary>
''' <param name="location">
''' Path, including file name, of the new ClickOnce application reference
''' file to create. File should have an ".appref-ms" extension.
''' </param>
Public Sub CreateClickOnceShortcut( _
ByVal location As String)
Dim updateLocation As Uri = _
Deployment.Application.ApplicationDeployment.CurrentDeployment.UpdateLocation
Dim AppSecurityInfo As New Security.Policy.ApplicationSecurityInfo( _
AppDomain.CurrentDomain.ActivationContext)
Dim DeploymentInfo As ApplicationId = AppSecurityInfo.DeploymentId
Dim PublicKey As Byte() = DeploymentInfo.PublicKeyToken
Using ShortcutFile As New IO.StreamWriter( _
location, False, System.Text.Encoding.Unicode)
ShortcutFile.Write(updateLocation.ToString().Replace(" ", "%20"))
ShortcutFile.Write("#"c)
ShortcutFile.Write(DeploymentInfo.Name)
ShortcutFile.Write(", Culture=neutral, PublicKeyToken=")
For i As Integer = 0 To (PublicKey.Length - 1)
ShortcutFile.Write("{0:x}", PublicKey(i))
Next i
ShortcutFile.Write(", processorArchitecture=")
ShortcutFile.Write(DeploymentInfo.ProcessorArchitecture)
ShortcutFile.Close()
End Using
End Sub
It appears that the ClickOnce application’s manifest must be signed for the shortcut’s application specific icon to appear. If it is not signed, the default application icon appears.