Here is a way without using a cmd, shell or batch file:
First of all your Setup-Application needs to be permitted to write in the Registry. You can achive that by setting your "requestedExecutionLevel" to "highestAvailable":
in file: "app.manifest"
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
Now you can use your DotNetFramework functions to create you uninstall RegistryKey:
'Setting My Values
Dim ApplicationName As String = "Yourapp"
Dim ApplicationVersion As String = "1.0.0.0"
Dim ApplicationIconPath As String = "%PROGRAMFILES%\Yourapp\yourapp.ico"
Dim ApplicationPublisher As String = "Yourname"
Dim ApplicationUnInstallPath As String = "%PROGRAMFILES%\Yourapp\UNINSTALL.exe"
Dim ApplicationInstallDirectory As String = "%PROGRAMFILES%\Yourapp\"
'Openeing the Uninstall RegistryKey (don't forget to set the writable flag to true)
With My.Computer.Registry.LocalMachine.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Uninstall", True)
'Creating my AppRegistryKey
Dim AppKey As Microsoft.Win32.RegistryKey = .CreateSubKey(ApplicationName)
'Adding my values to my AppRegistryKey
AppKey.SetValue("DisplayName", ApplicationName, Microsoft.Win32.RegistryValueKind.String)
AppKey.SetValue("DisplayVersion", ApplicationVersion, Microsoft.Win32.RegistryValueKind.String)
AppKey.SetValue("DisplayIcon", ApplicationIconPath, Microsoft.Win32.RegistryValueKind.String)
AppKey.SetValue("Publisher", ApplicationPublisher, Microsoft.Win32.RegistryValueKind.String)
AppKey.SetValue("UninstallString", ApplicationUnInstallPath, Microsoft.Win32.RegistryValueKind.String)
AppKey.SetValue("UninstallPath", ApplicationUnInstallPath, Microsoft.Win32.RegistryValueKind.String)
AppKey.SetValue("InstallLocation", ApplicationInstallDirectory, Microsoft.Win32.RegistryValueKind.String)
End With