17

我正在使用使用 Visual Studio 安装项目设计的 msi 安装程序部署我的应用程序。如何将注册表项设置为应用程序的安装路径?

4

4 回答 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
  1. 请按照以下步骤操作:
  2. 将类库项目添加到设置解决方案中。
  3. 将安装程序文件添加到您的类库项目中。
  4. 将创建的类库项目添加到您的安装应用程序文件夹
  5. 将创建的项目安装程序文件(在设置自定义操作窗口中)添加到“安装”子树项。

在此处输入图像描述

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

在此处输入图像描述

  1. 在安装程序文件(在类库项目中)上编写以下代码以将安装路径写入注册表。

     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 回答