我正在使用使用 Visual Studio 安装项目设计的 msi 安装程序部署我的应用程序。如何将注册表项设置为应用程序的安装路径?
24774 次
4 回答
29
实际上,当我在寻找相同的东西时,还提到了以下解决方案:
在注册表项中使用 [TARGETDIR]。
于 2009-08-23T16:50:47.597 回答
4
一种方法是在安装程序中创建自定义操作。在自定义操作上,您可以提供 CustomActionData "/Path="[TARGETDIR]*"。在您的自定义操作代码中,您可以引用 Context.Parameters["Path"] 并接收安装程序在您的 .NET 代码中传递的安装路径。
现在您的自定义操作代码中已包含 [TARGETDIR],您可以继续使用 Microsoft.Win32 命名空间来设置注册表项。
HTH - 威尔
于 2009-07-21T16:28:28.900 回答
4
只是添加到将 [TARGETDIR] 作为值放入注册表项。如果您使用的是 vs2012 的安装屏蔽,请在注册表项中使用 [INSTALLDIR]。
于 2014-09-11T22:41:22.473 回答
4
- 请按照以下步骤操作:
- 将类库项目添加到设置解决方案中。
- 将安装程序文件添加到您的类库项目中。
- 将创建的类库项目添加到您的安装应用程序文件夹
- 将创建的项目安装程序文件(在设置自定义操作窗口中)添加到“安装”子树项。

- 单击添加的项目并按 F4 打开属性窗口。
- 在属性窗口上将“/pDir="[TARGETDIR]\" 设置为 CustomActionData。

在安装程序文件(在类库项目中)上编写以下代码以将安装路径写入注册表。
Public Overrides Sub Install(ByVal stateSaver As System.Collections.IDictionary) MyBase.Install(stateSaver) Dim regsrv As New RegistrationServices regsrv.RegisterAssembly(MyBase.GetType().Assembly, AssemblyRegistrationFlags.SetCodeBase) '--------- adding installation directory to stateSaver ---------- stateSaver.Add("myTargetDir", Context.Parameters("pDir").ToString) End Sub公共覆盖 Sub Commit(ByVal savedState As System.Collections.IDictionary) MyBase.Commit(savedState) ''messagebox.show("salam") Dim InstallAddress As String = savedState("myTargetDir").ToString Dim regKey As RegistryKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("software\pourab\Sanjande", True) regKey.SetValue("InstalledFolder", InstallAddress)
于 2015-06-16T03:54:39.860 回答