2013-08-01 53 views
1

我在winforms中创建vb.net安装,我希望我的应用程序将像其他程序一样添加到控制面板 - >程序 - >程序和功能以及它的信息。如何添加我的程序来添加/删除程序? VB.NET

我试着用下面的代码来做到这一点:

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") 

什么是错在我的代码,我怎么能解决这个问题?

回答

0

我发现了一个间接的方式来做到这一点 - 通过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中打开它programically:

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) 
1

这是一种不使用CMD ,shell或批处理文件:

首先,您的设置 - 应用程序需要被允许在注册表中写入。您可以achive通过设置你的 “requestedExecutionLevel” 到 “highestAvailable”:

文件: “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 
相关问题