Tag: 安装程序

如何停止Windows服务进行升级安装?

我使用Visual Studio 2008开发了一个Windows服务和一个安装项目。当我进行升级安装时,我收到以下警告: 以下应用程序正在使用安装程序必须更新的文件。 您可以关闭应用程序并单击“再试一次”,或单击“继续”以使安装程序继续安装,并在系统重新启动时替换这些文件。 我想在升级安装期间停止Windows服务。 我已经尝试创建一个自定义操作并重写OnBeforeInstall方法,但是在警告弹出消息已经发生后,这会被调用得太晚。 有没有办法在msi安装程序中完成此操作。 在执行msi安装程序之前,我宁愿不必将此作为单独的任务执行。 更新: 根据进一步的研究,我发现MSI数据库支持这一点,但内置的Visual Studio安装程序(安装程序)项目并没有提供这样做的方法。 必须调整MSI数据库,或者使用WiX或商业安装程序。

安装所有用户和数据访问

修改我的安装程序应用程序以将我的exe和几个数据文件安装到所有用户都可以访问的位置的最佳方法是什么? 我希望任何XP / Vista / Win7用户在他们的开始菜单和桌面上都有选项。 一旦他们运行此应用程序,他们需要能够对与应用程序一起提供的一些数据文件进行写入更改。 我目前正在使用用户配置文件漫游数据文件夹或类似的东西。

SetValue 64位机器注册表

我想在下面的注册表路径中为’NoModify’设置一个值。 “HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows \ CurrentVersion \卸载\ XXXX” 我使用下面的代码,它只适用于X86机器。 你能看出为什么这对x64机器不起作用的原因吗? // This value is correct RegistryView registryView = releaseFlags.Contains(“PLATFORM_X86″) ? RegistryView.Registry64 : RegistryView.Registry32; using (RegistryKey hkeyLocalMachine = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, registryView)) { RegistryKey noModifyKey = hkeyLocalMachine.OpenSubKey(@”SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{xxxx}”, true); //SL: Key Name if (noModifyKey != null) { noModifyKey.SetValue(“NoModify”, 0); noModifyKey.Flush(); } }

将文件添加到exe,然后提取它们

我正在制作Windows安装程序,我需要在我的程序中放入一些文件,然后在程序运行时将它们解压缩到某个文件夹,让我说我要将3个文件放在单个exe文件中。 非常感谢你的帮助,爱你的Stackoverflow成员:)

重启当前进程C#

我有一个应用程序,里面有一些安装程序,我想重新加载与应用程序相关的所有内容,我想重新启动该过程。 我已经搜索并看到Application.Restart()并且它有缺点,并且想知道什么是我需要的最佳方式 – 关闭流程并重新启动它。 或者,如果有更好的方法重新初始化所有对象。

获取已安装产品列表c#

要安装/卸载/更新我们的软件,我们的自定义安装程序使用WindowsInstaller.Installer.Products从Windows注册表中获取已安装产品的列表。 在某些客户端计算机上,未知软件可能会在注册表“ HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ Installer \ Products ”中添加一个新条目,其名称类似于“ABCD”。 这导致WindowsInstaller.Installer.Products抛出exception。 我可以通过手动将注册表项条目添加到名为“test”的“ HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ Installer \ Products ”中来创建此方案。 如果我将测试重命名为新的GUID,那么模拟的问题就会得到解决。 你能建议任何可能的解决方法/解决方案吗? 使用MSIINV.exe工具会很困难,因为这是第三方工具,但这似乎有所帮助。

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

我有一个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:Context是null因为我在构造函数中这样做,我现在正在这个事件中执行此操作.AfterInstall现在我得到一个上下文,它似乎包含一个var“assemblypath”,其中包含我需要的路径。

如何在C#中查找IIS站点ID?

我正在为我的Web服务编写一个安装程序类。 在许多情况下,当我使用WMI时(例如,在创建虚拟目录时),我必须知道siteId为站点提供正确的metabasePath,例如: metabasePath is of the form “IIS://///Root[/]” for example “IIS://localhost/W3SVC/1/Root” 如何根据站点名称(例如“默认网站”)以编程方式在C#中查找?

安装软件程序如何提取文件?

我目前正在与安装程序一起工作,我想到的第一件事就是将.zip文件放在服务器上,然后让它下载并解压缩。 但是,我看到安装程序运行没有互联网连接(这对我来说不起作用),他们说“提取文件”,而不是下载。 有没有办法在安装程序中存储文件,我是否有像我目前这样的安装程序有什么问题?

如何从C#更改IIS中ApplicationPool的用户名/密码?

我使用下面的代码在我的应用程序的Installer类中创建一个新的应用程序池: private static void CreateAppPool(string serverName, string appPoolName) { // metabasePath is of the form “IIS:///W3SVC/AppPools” // for example “IIS://localhost/W3SVC/AppPools” // appPoolName is of the form “”, for example, “MyAppPool” string metabasePath = string.Format(“IIS://{0}/W3SVC/AppPools”, serverName); Console.WriteLine(“\nCreating application pool named {0}/{1}:”, metabasePath, appPoolName); try { DirectoryEntry apppools = new DirectoryEntry(metabasePath); DirectoryEntry newpool = apppools.Children.Add(appPoolName, “IIsApplicationPool”); newpool.CommitChanges(); […]