Как добавить мою программу для добавления / удаления программ? VB.NET
Я создаю установку vb.net в winforms, и я хочу, чтобы мое приложение, как и в других программах, было добавлено в Панель управления -> Программы -> Программы и компоненты и функции с его информацией.
Я попытался сделать это с помощью следующего кода:
My.Computer.Registry.LocalMachine.CreateSubKey("Software\Microsoft\Windows\CurrentVersion\Uninstall\Myapp").SetValue("Display Name", "Appname")
My.Computer.Registry.LocalMachine.CreateSubKey("Software\Microsoft\Windows\CurrentVersion\Uninstall\Myapp").SetValue("Display Version", "1.0.0.0")
My.Computer.Registry.LocalMachine.CreateSubKey("Software\Microsoft\Windows\CurrentVersion\Uninstall\Myapp").SetValue("Publisher", "SomePublisher")
My.Computer.Registry.LocalMachine.CreateSubKey("Software\Microsoft\Windows\CurrentVersion\Uninstall\Myapp").SetValue("Uninstall Path", "uninstpath")
Что не так в моем коде, и как я могу это исправить?
2 ответа
Я нашел косвенный способ сделать это - через cmd. Это не лучший способ, но это может сработать.
Вы можете написать следующий текст в ресурсах как name.cmd:
'sets the name of your app to display
reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\Yourapp" /v "DisplayName" /d "Yourapp" /f
'sets your app version to display
REG ADD "HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\Yourapp" /V "DisplayVersion" /D "1.0.0.0"
'sets your app icon to display location
REG ADD "HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\Yourapp" /V "DisplayIcon" /D "%PROGRAMFILES%\Yourapp\yourapp.ico"
'sets your name to display as publisher
REG ADD "HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\Yourapp" /V "Publisher" /D "Yourname"
'sets the uninstall path
REG ADD "HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\Yourapp" /V "UninstallString" /D "%PROGRAMFILES%\Yourapp\UNINSTALL.exe"
REG ADD "HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\Yourapp" /V "UninstallPath" /D "%PROGRAMFILES%\Yourapp\UNINSTALL.exe"
' sets the install directory
REG ADD "HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\Yourapp" /V "InstallLocation" /D "%PROGRAMFILES%\Yourapp\"
И затем вы открываете его в cmd программно:
Dim procInfo As New ProcessStartInfo()
procInfo.UseShellExecute = True
'writes the file name.cmd to appdata
IO.File.WriteAllText(My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData + "/name.cmd", My.Resources.name)
'sets the path of the file to be opened to name.cmd
procInfo.FileName = My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData + "/name.cmd"
procInfo.WorkingDirectory = ""
procInfo.Verb = "runas"
'running the file in cmd
Process.Start(procInfo)
Вот способ без использования cmd, shell или командного файла:
Прежде всего, ваше Setup-приложение должно быть разрешено для записи в реестре. Вы можете добиться этого, установив для параметра "selectedExecutionLevel" значение "highAvailable":
в файле: "app.manifest"
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
Теперь вы можете использовать функции DotNetFramework, чтобы создать деинсталляцию 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