C# 如何安装Windows服务作为应用程序安装的一部分
我创建了一个安装程序,该安装程序从选择的子项目中获取主要输出,这是构成我的应用程序的子项目之一,是Windows服务.该服务需要作为主要应用程序的一部分安装. 到目前为止.我将从命令行安装东西,但是我需要在Visual Studio CMD工具中包装以访问 installutil 命令. 我的问题是,我可以从" Visual Studio Installer -Setup Project"作为较大项目的一部分安装Windows服务,如果是这样,请如何?随着过程使我如此自然. 我想我可以尝试让自定义操作触发一个作为过程的一部分执行ServiceInstaller的脚本,因此我将尝试. 预先感谢 解决方案 由于VS2013不包含旧的(VS2010)Visual Studio Installer项目,因此我有这些建议: 使用wix安装程序:甚至还有一个服务安装程序模板(未测试): -1763-4340-B720-AB2D359009C5 使用vs
0 2024-04-26
编程技术问答社区
我的安装失败(缺少DLL).我该怎么做才能纠正这一点?
我无法安装我的项目,因为setup.exe给出了 错误1001.无法在C中获得安装程序类型:\ Program Files \ myProgram \ si.archiveservice.archiveservice.archiveservice.exe Assembly 无法加载一种或多种请求类型.检索LoadereXceptions属性以获取更多信息. 所以我查看了融合日志,并且有3个错误(我在底部发布了最相关的).下面的一个翻译回英语,因此措辞可能会略有关闭.但是从我所看到的,缺少一个组件: 日志:邮政政治参考:si.archiveservice.commonlogic.exceptions,版本= 1.0.0.0,文化=中性,publicKeyToken = 925C8734AEAE397609 这是否意味着它看起来在GAC中,找不到它?我将项目作为解决方案的一部分,但我不知道为什么突然失败.在安装项目中,将主要输出添加到文件夹"全局组装缓存文件夹"
4 2024-04-26
编程技术问答社区
管理的DLL方法在installshield中失败了
好吧,所以我有以下班级库,我在C#中写了这一点: public class Program { public void GetProductID(string location, out string productId) { ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Product"); ManagementObjectCollection collection = searcher.Get(); var item = new Win32Product(); //var crap = (collection as IEnumerable).Where(o => o["InstallLocation"].ToString().StartsW
10 2024-04-26
编程技术问答社区
MSI自动修复问题的解决方法?
我使用Visual Studio 2008创建了一个MSI安装程序.安装后我有一些需要删除的临时文件,但是自动修复功能使我感到困扰.通过单击安装程序创建的快捷方式来触发自动修复功能.我正在考虑创建自己的快捷方式,以避免自动修复.我通过在安装后手动创建快捷方式来尝试此操作.有效. 现在,我正在尝试找到一种在安装程序的自定义操作中创建快捷方式的方法.我的问题是安装程序是否可能有任何负面影响? 谢谢 解决方案 即使您设法有意绕过Windows安装程序,如果用户键入"添加/删除程序"中的维修按钮,则文件仍然会返回.取而代之的是,您应该寻找在安装过程中暂时可用的方法而不实际安装文件的方法.可悲的是,vdproj是如此有限,以至于这并不能使这样做很容易. 但是,如果您想忽略所有这些,而只是解决问题,请查看对MSI的运行后构建脚本,以使快捷方式无意识.
12 2024-04-26
编程技术问答社区
如何发现一个应用程序的主要可执行文件
我正在以无人看管的方式进行编程安装应用程序(没有什么特别的,只需传递参数"/非常siLent/suppressmgboxes/norestart"(如果exe)或" msiexec/qn/i yellusers = 1",而msi是msi文件,则是msi file)./p> 问题是在安装后,我想打开我刚安装的应用程序.然后,我正在寻找一种发现刚刚安装的应用程序的主要可执行文件的方法. 我尝试过监视硬盘并检查注册表,但我没有发现任何可靠和通用的东西. 我该如何实现? 解决方案 我找到了一种合适的方法,希望这可以帮助其他人. Windows 10中有一个特殊的隐藏对象,列出了以这种方式打开的所有应用程序(UWP和常规): win + r put shell:appsfolder并执行它. 那么,这是一个问题,是通过编程中获取列表并检查安装后发生了什么变化. 这是以这种方式实现的(需要 ): var appsFolderId = new G
46 2024-04-25
编程技术问答社区
如何在C#中把WindowsInstaller.Record转换为System.Data.Dataset或数据表(在读取MSI文件时)?
我想读取MSI文件(Windows Installer软件包).我写了一个函数,该函数采用两个输入参数:msifilename和表名称,并返回一个数据表,该数据表是MSI表之一. public DataTable ReadMsiPropertyTable(string msiFile, string tableName) { Type installerType = Type.GetTypeFromProgID("WindowsInstaller.Installer"); WindowsInstaller.Installer installer = (WindowsInstaller.Installer)Activator.CreateInstance(installerType); Database database = installer.OpenDatabase(msiFile, 0);
4 2024-04-25
编程技术问答社区
安装成功后,使VDProj .MSI安装程序将自己复制到本地
我们有大型C#应用程序涵盖了许多项目,这些项目通过在.vdproj文件上运行MSBUILD(或通过Visual Studio 2010)将其包装到.msi文件中.该安装通常可以正常工作,如果在本地机器上找不到其他必需的软件,请正确警告. 但是,如果安装成功,我们希望安装程序将自己复​​制到程序文件中的某些特定文件夹.例如'c:\ program Files \ App \ App \ Appl \ install_1.2.3.4.msi'. 有人知道这样做的任何方法吗? 解决方案 您可以从例如,您可以编写一个简单的EXE,该EXE接收[OriginalDatabase]作为参数并执行复制操作. 在Visual Studio中未显示安装Finalize.您可以在安装下添加自定义操作,并使用您可以通过使用其他设置创作工具来获得对自定义操作的更多控制.
10 2024-04-25
编程技术问答社区
创建多个应用程序的安装程序
我有一些应用程序,其中一些是用MFC编写的,其中一些是用.net编写的. 我想创建一个单个安装程序,该安装程序将在"清洁"机器上安装所有这些应用程序(在其上没有任何开发环境).安装程序除了应用程序外, 需要安装适当的.NET框架和VC运行时环境. 其他事情: 我无法访问所有这些应用程序的代码. 这些应用仅在Windows机器上安装. 所有应用程序都不是基于Web的(WIN应用程序). 有人知道一些好的安装工具可以帮助我完成此任务吗? 非常感谢. 解决方案 看看 nsis : nsis(nullsoft scriptable安装系统)是创建Windows安装程序的专业开源系统.它旨在尽可能小巧,非常适合Internet发行. 作为用户对产品的第一次体验,稳定且可靠的安装程序是成功软件的重要组成部分.使用NSIS,您可以创建能够完成设置软件所需的一切的安装程序. NSI是基于脚本的,允许您创建逻辑以处理最复杂的安装任务.许多插件和脚本已经可
6 2024-04-25
编程技术问答社区
VS2010设置项目与C++2008重新分配?
以下情况是: 我有一个Visual Studio 2010 安装C#可执行文件 的设置项目 安装包括一个C#DLL,该C dll引用了C ++ DLL C ++ DLL需要C ++ 2008 库 问题在于,使设置项目安装C ++ 2010库非常容易,但是我尝试安装2008年没有太多运气. 在2010年,它与项目>"属性">"先决条件"部分中选择C ++ 2010一样简单. 2008不是一个选择. 我发现了许多有关使用合并模块安装C ++重新分布物的文档.但是,在C:\ Program Files(X86)\ Common Files \ Merge模块目录中,我只有C ++ 2010 Merge模块.我找不到C ++ 2008合并模块可从任何信誉来源下载. 我可以下载 redistributable installer ,但我不知道如何使设置项目使用它. 我找到了这个 msdn >创建Bootstrapper软件包时. hopwever, boottrappe
10 2024-04-25
编程技术问答社区
将MSI路径复制到Windows安装程序时
我目前正在开发一个具有设置安装程序项目的C#项目.在安装过程中,是否有任何方法可以访问复制的MSI文件的路径(尤其是名称)(它在C中被缓存在C:\ Windows \ Installer中)? 我想将其存储在文本文件中,以便能够直接从表单中卸载我的应用程序. 解决方案 卸载 :无需直接访问该文件,有很多方法可以卸载而无需使用缓存的文件名: 命令行不使用msiexec . 最简单的只是卸载按产品代码: msiexec.exe /x {PRODUCT-CODE-1111-1111-11111111111X} 您可以卸载由UPGrade Code ( 2 )或" wix(删除所有以前的版本) 您不是在试图卸载从其自己的GUI运行的应用程序吗? :-) 触犯法律.触犯法律.不会尝试. localpath :还有几种方法可以通过MSI API检索本地缓存路径: On Error Resume Next Set installer = Creat
4 2024-04-25
编程技术问答社区
真的很努力地获得Wix的工作方式
我正在从事WPF项目.我创建了一个WIX项目,该项目与主项目一起运行并具有program.cs组件以及XML文件. 尽管我可以看到它在重新构建项目时会创建安装程序,但对我来说尚不清楚的是为什么我没有内部或作为其中的一部分拥有实际的WPF项目.因此,实际上我在运行它时不会安装任何内容.只是一个shell program.cs文件,它是WIX项目的一部分. 我根本没有真正的项目.因此,如何有效地将WPF项目"添加"到Wix项目中,以生成.exe或.msi文件. 当我使用Windows本机构建项目时,我能够得到这个,但是确实很乏味. 谢谢 易卜拉欣 解决方案 大多数理解Wix的工作方式都是了解Windows安装程序的工作方式. Wix主要是作者和构建Windows Installer(.msi)数据库文件的语言和编译器.它确实还有一些其他扩展程序,并且能够创建Bootstrappper/Chainer(.exe),这是可以理解的其他技术. MSI,因此应以
6 2024-04-25
编程技术问答社区
在VS 2015中安装Visual Studio 2012安装程序项目后,"应用程序没有安装"。
我有一个我使用Visual 2012的内置安装Shiftshield Limited Edition向导创建的安装程序项目. 我需要在新计算机上修改该项目.源代码是通过Team Foundation Server保存并获得的. 到目前为止,我已经在Visual Studio 2015中打开了解决方案,安装了Visual Studio Installer Projects Extension,并且我仍会收到(不兼容的)消息以及折叠的消息"该应用程序未安装"安装程序项目专门.所有其他项目 +项目类型编译并运行良好. 对我缺少什么的想法? 解决方案 这两个是独立的工具,需要单独安装安装罩LE才能打开项目,因为这是一个开始的安装罩项目. Windows安装程序扩展名是单独的. 这是因为没有安装安装罩.出于我的目的,我在这两种情况下都使用了installshield le 2015.要解决,我使用下面描述的方法安装了安装圈. 从Visual Studio 20
无法为已安装的msi文件查询注册表
Windows安装MSI文件后,它将重命名该文件,将其移动到C:\ Windows \ Installers并编写有关如何找到该文件到注册表的信息. 我想查询注册表中的该键,以获取已安装文件的确切位置.我要寻找的值可以找到: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\ 不幸的是,我不知道已安装文件的确切ID,因此我必须打开此位置上列出的所有项目并检查产品名称. 但是,当我尝试以编程方式查询注册表的这一部分时,我看不到应该在此地方列出的任何项目. 这是我现在正在使用的代码(不包括例外处理等): Registry.LocalMachine.OpenSubKey("SOFTWARE").OpenSubKey("Microsoft").OpenSubKey("Windows").OpenSubKey("Curren
24 2024-04-24
编程技术问答社区
c#在windows上更新一个程序,而它仍然在运行。
我有一个带有关联服务的信息亭上的程序,该程序通过定期在Web上检查较新版本的MSI来更新程序.如果找到一个,它将安装它,该程序仍可能正在运行. 要解决上述解决方案的DLL冲突,我将使用版本重命名MSI中的组件,以便在旧版本运行时可以安装新版本.该应用程序将对较新版本组件的安装目录进行轮询,如果它不使用,则会发现它会立即重新启动.有什么更好的方法吗? 解决方案 我以前做过这个故事.它是这样的工作: 在登录用户时,UI正在运行. 服务作为系统运行.该服务检查内容并将其下载到临时目录.然后,它使用/JM命令对MSI进行广告.现在可以由非私有用户安装安装程序. 服务将IPC消息发送到应用程序,说是时候安装了.该应用程序启动了安装程序,将其传递给指示重新启动应用程序的标志.应用程序退出锁定文件. 在安装程序的末尾,标志会导致安装程序重新推出应用程序. 还要查看其他解决方案 在这里clickonce不是一个更好的选择吗? t71a733d.aspx
4 2024-04-24
编程技术问答社区
如何在visual studio中包括Uninstall MyProgram.exe,同时在c#中创建软件包
我已经开发了WPF应用程序并为此创建了设置.我正在使用Windows安装程序来创建设置软件包.现在,我想在安装我的软件包后在开始菜单中包含卸载myprogram.exe. 我能够在安装后添加EXE来运行程序.我想包括卸载myprogram.exe,readme文件,在开始菜单中的帮助文件. 任何建议都对我有帮助. 提前致谢, 易卜拉欣. 解决方案 创建安装程序包时,它会分配唯一的ID(如果我不忘记的话,产品代码).您可以使用以下行创建一个批处理文件: @echo off start /b /l msiexec.exe /x {Product Code} 现在右键单击文件系统树(在项目视图中),并包含此批处理文件.为其分配一个不错的图标,并创建"卸载"条目以启动您的应用程序菜单文件夹. ps: - 只需在运行或CMD窗口中键入msiexec.exe即可获得更多选项. pps: - 设置项目的属性中可用产品代码.在解决方案树和打开属性选项卡中选择设置项目.
10 2024-04-24
编程技术问答社区
如何向用户显示安装程序
用户单击我的应用程序更新时,我想显示安装程序. 安装程序位于服务器上. 向用户展示MSI或安装程序的最佳方法是什么? 有例子吗? 谢谢 解决方案 首先,您需要将安装程序包将其复制到客户端.您可以传输二进制数据或使用WebClient下载. 然后,您可以使用Process.Start和msiexec实用程序 执行安装程序包 msiexec /quiet /i "c:\myinstallationpackage.msi" // for hidden installation msiexec /qb /i "c:\myinstallationpackage.msi" // for installation with base steps without any actions from the user msiexec /i "c:\myinstallationpackage.msi" // usual installation 其他解决方案 下载MS
6 2024-04-24
编程技术问答社区
如何在我的WiX安装程序的托管DLL/自定义动作中包含一个本地DLL?
我正在制作使用C#编写的自定义操作DLL的Wix/MSI安装程序.在那个自定义动作中,我正在使用本地/非托管DLL.这是一个例子: [DllImport("log.dll", CharSet = CharSet.Unicode, SetLastError = true, CallingConvention = CallingConvention.StdCall)] static extern int CloseLog(IntPtr hLog); 问题是,当我的MSI运行并调用自定义操作时,我的呼叫CloseLog抛出DllNotFoundException exception. 我可以手动将链接添加到log.dll的log.dll中 但问题是无法指定从C#项目中使用的log.dll的构建 所以有什么建议如何做? 解决方案 您可以通过像这样定义项目文件中的customActionContents
10 2024-04-24
编程技术问答社区
是否可以检查哪个MSI软件包依赖于特定软件包?
就像标题中一样,当我有一些MSI软件包时,是否可以看到其他软件包取决于它?如果是,怎么样? 如果不可能,至少可以告诉MSiexec根据需要卸载所有依赖包装? 解决方案 简而言之:是和否.我猜.可以按顺序安装几个MSI文件,而无需任何可靠的方法来判断它们实际上是作为产品相关的,但是它们也可以通过各种机制捆绑在一起,以便它们可以作为"单个单元"安装(套件或bootstrappers,请参阅下面),但安装后它们可能仍不被"标记". 将MSI设置捆绑在一起(启动器,引导者,套房) installshield 等商业工具具有" 设置套件",我认为它们被称为.我相信他们甚至可以在添加/删除程序中有一个条目,但是我不确定(我们不总是可以访问所有最新版本的商业工具). wix - 传递MSI文件的开源框架 - 具有称为 burn>的功能(甚至是我不适合使用的其他机制).它允许您使用启动器GUI顺序运行多个MSI文件. 还有其他解决方案,或 bootstrappers
10 2024-04-24
编程技术问答社区