J4N*_*J4N 13 c# registry installer startup visual-studio
我有一个C#.net 4应用程序,我开始创建安装程序.
安装的程序工作正常,但我的客户希望应用程序从窗口开始(它是一个"始终顶部"工具栏,帮助他们管理他们的调用).
我想创建一个"类安装程序",并在其中插入一个键在注册表中.
我有两个问题:
第一:如何找到可执行路径?它可以在安装之间改变.我在某处找到了Application.ExecutablePath,但它似乎位于Application.Window.Forms中,所以我认为它与WPF不兼容
第二:我需要在本地机器的注册表中插入此密钥.Windows安装程序中是否有一种方法可以指定用户必须具有管理员权限?
这是我开始的代码:
RegistryKey rkApp = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
rkApp.SetValue("CstStart", ???);
Run Code Online (Sandbox Code Playgroud)
非常感谢您的帮助!
编辑:我发现我可以传递给我的自定义操作一些数据,:
/ DIR = "[TARGETDIR] \"
在CustomActionData中.
通常它说我可以通过它检索它
this.Context.Parameters["DIR"];
Run Code Online (Sandbox Code Playgroud)
但是....似乎在我的安装程序类中,this.Context为null :(
EDIT2:Context是null因为我在构造函数中这样做,我现在正在this.AfterInstall中执行此操作,现在我得到一个上下文,它似乎包含一个var"assemblypath",其中包含我需要的路径.
Pet*_*teH 40
我的假设是你在这里安装项目 ......
一种方法 - 我不是说这是最好的,但它可能是最简单的 - 是做以下事情:
在"文件系统"选项卡中,右键单击"目标计算机上的文件系统","添加特殊文件夹","用户的启动文件夹",此类文件夹将显示在列表中.接下来,获取项目输出的快捷方式(通过右键单击)并将该快捷方式拖到Startup文件夹中.
最后,由于您希望为所有用户提供此功能,请进入"部署项目属性"并将"InstallAllUsers"设置为true.
现在,这种方法有一个警告,因为应用程序不会在Windows启动时启动,而是在有人登录时启动.根据您对项目的说法(UI应用程序),这可能没问题.
如果你真的想破解注册表,你可以考虑创建一个自定义动作DLL.这是你可以写出你喜欢的东西的东西,在安装过程结束时,安装程序会调用你的dll,这样你就可以完成你的工作了.您可以将可执行文件的路径作为参数传递给dll(您可以从安装程序对话框中获取,而不是从任何对象中获取).我不会详细介绍这一点,因为网上必须有关于此的负载.
您应该知道,有一些信息可以传递到dll中 - 如果内存服务,可能会低至256个字符.你可能只是一条路,但是当你开始做更多时......
关于检测用户是否是本地Admin,这有点棘手,只是因为自定义操作dll在安装结束而不是在开始时运行 - 所以你可以编写代码来找出哪些组当前用户进入,但是在代码运行之前你可能已经被炸毁了.我不相信 - 至少在Microsoft安装项目中 - 有可能知道这一点.