【问题标题】:Is there any way for a .NET application to read a variable defined at installation time?.NET 应用程序有什么方法可以读取安装时定义的变量吗?
【发布时间】:2010-12-08 04:03:27
【问题描述】:

使用 Visual Studio 安装项目,我可以要求用户提供一些输入,例如文件夹的位置。已安装的应用程序有什么方法可以读取用户输入?

【问题讨论】:

    标签: .net visual-studio setup-project


    【解决方案1】:

    最简单的方法是将值存储在注册表中:

    1. 右键单击您的设置项目并选择查看 -> 用户界面

    2. Install下添加一个新对话框并将其移动到序列中的正确位置

    3. 对话框中的每个控件都有一个名为 Property 的属性,例如Edit1PropertyButtonProperty。该属性的名称应该是某个唯一值,默认情况下它类似于 EDITA1。我们稍后会使用这个属性名来引用控件的值。

    4. 右键单击您的安装项目并选择查看 -> 注册表

    5. 导航到HKCU\Software\[Manufacturer]HKCU\Software\[Manufacturer],具体取决于您是要仅为当前用户还是计算机范围存储此设置。您还可以在用户/机器配置单元下创建一个新条目。然后条目将存储在 HKCU 或 HKLM 下,具体取决于安装是按用户还是按机器。

    6. 在 5 中选择的键下创建一个新值。在该值的属性视图中,输入在步骤 3 中指定的控件的属性名称。该名称必须放在方括号中,例如[EDITA1] 你就完成了。

    【讨论】:

    【解决方案2】:

    您可以将提供的位置传递给自定义安装操作,并使用用户提供您的自定义安装操作的值做任何您想做的事情。保存到文本文件、配置文件、注册表等...

    只需将用户通过 CustomActionData 选择的值传递给您的自定义安装操作并在 OnInstall 期间读入即可。

    http://msdn.microsoft.com/en-us/library/2w2fhwzz(VS.80).aspx 详细介绍了如何将数据传递到您的自定义安装操作中。

    然后,当您启动应用程序时,您可以从已知位置读取任何内容。

    【讨论】:

    • 据我了解,CustomActionData 使安装程序能够从命令行接收数据。
    • 再研究一下,我发现安装项目可以使用 CustomActionData 将数据传递到主输出(如果它是安装程序类)。正如你的意思。
    • 抱歉,我之前不是很清楚,我寻找了一个自定义安装程序类的好例子来与您的自定义操作相关联,但找不到足够快的好一个。不管怎样,它们很容易设置。
    • 我无法让它到达 app.config 文件。更多关于stackoverflow.com/questions/1591725/…
    • 如果您可以在正确的路径中打开 app.config 文件,您应该能够使用 System.Configuration 命名空间应用设置。通常,在这种情况下使用安装程序类时,我会使用相对于 Assembly.Location 的位置来定义安装程序类,因为运行安装程序的进程是 msiexec。
    【解决方案3】:

    我还没有尝试过,但我认为您可以在安装时写入 Windows 的注册表并在运行时读取它。

    【讨论】:

    • 这是一般的做法,从注册表/数据库/配置文件写入/读取。注册表是应用程序和升级/卸载访问的一个很好的公共位置。从技术上讲,我认为某些情况下的注册表可能会被锁定,因此应用程序无法读取,但我还没有真正遇到过这样的设置。
    【解决方案4】:

    有几种方法...

    • 安装程序可以在特定位置写入配置文件,然后应用程序可以读取该配置文件(通常用于较旧的 Windows 版本和 linux 变体)
    • 对于 Windows 程序,注册表是写入和读取此类信息的首选方式(直到 MS 提出执行这些操作的新方式)。每个应用程序在注册表中都有一个“典型”路径,并且可以对其进行读写。这不仅适用于用户在安装过程中设置的信息,还适用于很多配置内容。

    虽然不确定您的问题的目的是什么.. 听起来您有一个特定的场景。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-24
      • 1970-01-01
      • 2010-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多