c# - 设置程序必须在启动时从安装程序运行

标签 c# visual-studio installation registry startup

我有一个 C# .net 4 应用程序,我开始创建安装程序。

安装的程序运行良好,但我的客户希望应用程序以窗口启动(它是一个“始终位于顶部”的工具栏,可帮助他们管理调用)。

我想创建一个“类安装程序”,并在其中插入一个注册表项。

我有两个问题:

第一:如何找到可执行路径?它可以在安装之间更改。我在某处找到了一个 Application.ExecutablePath,但它似乎位于 Application.Window.Forms 中,所以我认为它与 WPF 不兼容

其次:我需要在本地机器的注册表中插入这个键值。 Windows 安装程序中是否有一种方法可以指定用户必须具有管理员权限?

这是我开始的代码:

RegistryKey rkApp = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
rkApp.SetValue("CstStart", ???);

非常感谢您的帮助!

编辑:我发现我可以将一些数据传递给我的自定义操作,其中:

/DIR="[TARGETDIR]\"

在 CustomActionData 中。

一般都说可以通过

this.Context.Parameters["DIR"];

但是....似乎在我的安装程序类中,this.Context 为 null :(

EDIT2:上下文为空,因为我在构造函数中执行此操作,我现在在 this.AfterInstall 事件中执行此操作,现在我得到一个上下文,它似乎包含一个 var“assemblypath”,它恰好包含我需要的路径。

最佳答案

我的假设是您在此处使用安装项目......

执行此操作的一种方法 - 我并不是说它是最好的,但它可能是最简单的 - 是执行以下操作:

在“文件系统”选项卡中,右键单击“目标机器上的文件系统”、“添加特殊文件夹”、“用户的启动文件夹”,这样的文件夹就会出现在列表中。接下来,获取项目输出的快捷方式(通过右键单击)并将该快捷方式拖到“启动”文件夹中。

最后,由于您希望所有用户都这样做,请进入“部署项目属性”并将“InstallAllUsers”设置为 true。

现在,这种方法有一个警告,因为应用程序不会在 Windows 启动时启动,而是在有人登录时启动。根据您对项目(一个 UI 应用程序)的描述,这可能没问题。

如果您真的想破解注册表,您可以考虑创建一个自定义操作 dll。您可以在这里编写几乎所有您喜欢的东西,并且在安装过程结束时,安装程​​序将调用您的 dll,以便您可以做您的事情。您可以将可执行文件的路径之类的东西作为参数传递给 dll(您可以从安装程序对话框中获取,而不是从任何对象中获取)。我不会深入讨论这个细节,因为网络上肯定有很多关于这方面的内容。

您应该知道,您可以传递到 dll 中的信息量是有限的 - 如果内存可用,可能低至 256 个字符。您可能只需要一条路径就可以了,但是当您开始做更多事情时……

关于检测用户是否是本地管理员,这有点棘手,因为自定义操作 dll 在安装结束时而不是开始时运行 - 所以您可以编写代码来找出当前用户在哪个组中,但是您很可能在该代码运行之前就已经炸毁了。我不相信 - 至少在 Microsoft 安装项目中 - 有可能知道这一点。

关于c# - 设置程序必须在启动时从安装程序运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5092477/

相关文章:

c++ - Visual Studio Build Tools 14 找不到 stdio.h

asp.net - 无法读取配置节 'appSettings',因为它缺少节声明

visual-studio - 在 VSTS 中构建 NuGet 包时,版本永远不会更新

cassandra - 错误 : Could not find or load main class org. apache.cassandra.service.CassandraDaemon

windows - 可以在其他安装程序中使用基于 WiX 的 Windows 安装程序吗?

c# - 导致死锁的异步/等待示例

c# - SNMP GETBULK 和 GET 操作有什么区别

c# - 如何重命名当前由 Windows 资源管理器打开的 C# 中的文件夹

c# - 从 IhttpModule 注入(inject) js

php - 无法通过intl-support安装PHP 5.3.0