Tag: custom action

从C#中的Msi中的自定义操作强制重新引导

如何在C#自定义操作中安装后提示重新启动计算机? 我们正在使用VS 2005的安装项目进行设置,我们需要以编程方式决定提示重启(因此不会在每次安装时发生,只在某些安装上)。 更新:我们正在寻找已经内置到MSI自定义操作系统中的内容。 如果不存在,我们可以采取某种方式重新启动PC,但希望避免这种情况。 更新:我们看到在编辑Orca中的Msi时可以设置REBOOT = Force的位置,您可以在运行时从C#自定义操作修改这些表吗? 我们可以将其设置为每次都重新启动,但这可能会使我们的设置烦人(它只需要在极少数情况下重新启动)。 更新:我们尝试设置: savedState[“REBOOT”] = “Force”; 从我们自定义操作的Install()方法中,但没有运气。 它似乎不像IDictionary,savedState真的做任何事情。 还尝试过: Context.Parameters[“REBOOT”] = “Force”; 但我认为这个集合只是传递给自定义操作的命令行参数。 更新:有没有办法用Orca编辑我们的MSI以使这个技巧有效? 也许在某些文件存在的情况下安排重启? 我们还没有找到如何从C#自定义操作设置MSI属性。 更新:我们尝试连接到AppDomain.ProcessExit和AppDomain.DomainUnload并启动一个新线程并调用Process.GetCurrentProcess()。WaitForExit()并且这些事件都不会从C#自定义动作中触发…

WIX – 添加C#自定义操作代码

我正在创建一个由Wix安装的程序,使用VS 2010,我已经准备好了product.wxs。 现在我想为安装添加自定义C#操作。 我已经搜索了如何做到并找到了这个指南: 如何创建完全成熟的C#自定义操作? 问题是我不理解所有说明,特别是在本指南的这一部分中: Integrate the C# custom action in Advanced Installer 我已经创建了自定义操作项目,但我不明白如何告诉安装项目运行该自定义操作,以及如何在提交阶段将操作设置为在安装时运行。 另一件相关的事。 如何在C#代码中获取用户选择安装的安装路径?

如何使用CustomAction更改ROOTDRIVE?

通常,您可以更改默认根驱动器以将应用程序安装到使用: D:\ 但是现在,我希望使用在我的安装向导中单击下一个按钮时调用的CustomAction来更改它: [CustomAction] public static ActionResult SetFullInstallRootDrive(Session session) { session[“ROOTDRIVE”] = session[“DRIVE_NAMES”].ToString(); } DRIVE_NAMES表示使用combobox选择的驱动器,并且ROOTDRIVE可以正确设置为我选择的任何本地驱动器(例如, C:\或D:\ )。 但是,安装程序始终安装到最初在上面的属性中设置的D:\驱动器。 发生了什么,以及如何在自定义操作中动态更改此属性的值,以便我可以让用户选择根驱动器来安装我的Web应用程序? 属性DOES已设置,但它不使用它,它几乎就像ROOTDRIVE属性仅在安装向导开始时被评估一次。

Wix:在自定义操作中写入文件

我遇到了wix和托管自定义操作的问题:在我的自定义操作中,我创建了一个文件并将其保存在INSTALLLOCATION路径中。 它似乎工作,没有抛出exception。 但是在安装之后,刚刚创建的文件在INSTALLLOCATION中不存在。 维克斯 – 文件: 定制操作-了Methode: … var keys = new string[session.CustomActionData.Keys.Count]; session.CustomActionData.Keys.CopyTo(keys, 0); var cad = keys[0]; var filepath = cad + “myfile.xml”; File.Create(filepath); … 有人有想法吗? 编辑:在Scott Boettger的post后编辑了wix文件内容。

我需要一个MSI自定义操作,从MSI源目录复制文件

我正在使用VS 2008为ac#windows项目创建一个安装程序。我正在尝试编写一个自定义操作,从存储在文件服务器上的MSI文件的源目录中复制一个设置文件(例如\ server \ fileshare \ myappinstaller \ mysetting.xml)到安装了我的应用程序的计算机上的目标目录(例如C:\ Program Files \ My App)。 设置文件无法添加到安装程序中,因为它包含的设置对于安装应用程序的客户来说是唯一的。 有没有人有这样的自定义动作的代码(最好是C#或VB.NET)? 或者,有人知道如何在自定义操作中获取MSI源位置(例如\ server \ fileshare \ myappinstaller)。 非常感谢

通过WiX使用的C#中的自定义操作失败,错误1154

我在Visual Studio 2010中使用WiX 3.5.1930,目标是.NET Framework 3.5。 (后来每周构建的WiX似乎在他们的自定义操作模板方面非常破碎,至少现在是这样。1930年是最近的构建,似乎使可构建的C#CA具有工作引用。) 我有两个用C#编写的自定义动作程序集。 其中一个工作正常。 另一个失败,出现以下错误: CustomActionnNameHere returned actual error code 1154 (note this may not be 100% accurate if translation happened inside sandbox) 我已经比较了.csproj文件和.wixproj文件,并且我可以告诉它们差异是合适的(例如包含.cs文件的列表)。 我已经更改了非工作的.wxs来调用工作自定义操作而不是非工作自定义操作,它可以作为epxected。 我还能看到什么让这个工作? 编辑:只是为了完成1154指的是一个无效的DLL – net helpmsg将它(英文)翻译为“运行此应用程序所需的库文件之一已损坏”。 第二次编辑:对dll运行peverify(在安装程序运行时从\ windows \ installer中获取副本)并且它表示dll中的一切正常。 DLL仅具有“返回成功”的自定义操作方法,因此validation它并不是很多,但它确实证实DLL没有损坏。 第三次编辑:损坏的自定义操作中的代码如下: using Microsoft.Deployment.WindowsInstaller; namespace Framework.Installer.Database { public class CustomActions { [CustomAction] public static ActionResult RunMigration(Session […]

证书存储区中证书的私钥不可读

我想我和这个人一样有同样的问题,但我没有他/她那么幸运,因为提供的解决方案对我不起作用。 提供的解决方案在C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys ( 不在子目录中)和C:\Users\[Username]\AppData\Roaming\Microsoft\Crypto\RSA (和子目录)中查找文件但是因为我希望安装程序将应用程序安装到所有用户,所以自定义操作在SYSTEM -User下运行,这导致实际在C:\ProgramData\Application Data\Microsoft\Crypto\RSA\S-1-5-18 。 当以管理员(右键单击 – >运行为管理员)运行“普通”应用程序执行完全相同的代码时,将在C:\Users\[Username]\AppData\Roaming\Microsoft\Crypto\RSA\S-1-5-21-1154405193-2177794320-4133247715-1000创建一个文件C:\Users\[Username]\AppData\Roaming\Microsoft\Crypto\RSA\S-1-5-21-1154405193-2177794320-4133247715-1000 。 使用WIX自定义操作生成的证书似乎没有私钥(“ 密钥集不存在 ”),而“正常”应用程序生成的证书具有。 在查看文件的权限时,它们似乎没问题,即使它们不同(工作者确实包括SYSTEM用户),即使将SYSTEM 1添加到(“非工作”)文件后我也无法在这里读取私钥,同样的错误。 然后我使用FindPrivateKey工具找到相应的文件,但我得到的是”Unable to obtain private key file name” 。 好的,这里有什么? Windows在哪里存储SYSTEM用户存储的证书的私钥? 也许没有创建任何私钥文件? 为什么?

如何执行具有依赖项的WiX自定义操作DLL文件

我想创建一个依赖于第三方.NET DLL的CustomAction C#DLL文件(在这种特定情况下,它是MySql.Data.dll )。 我有C#自定义动作DLL文件与下面的WiX片段一起使用。 我只想弄清楚如何安全地为自定义操作添加依赖项。 注意:我实际上并不需要此第三方DLL文件文件来运行已安装的应用程序。 NOT Installed 我是否需要安装第三方DLL文件( MySql.Data.dll )才能运行自定义操作? 我可以使用第三方DLL文件添加另一个二进制标记吗?

标记MSI,因此必须以提升的管理员帐户运行

我有一个CustomAction作为MSI的一部分。 它必须作为域帐户运行,该帐户也是本地Administrators帐户的成员。 它不能使用NoImpersonate标志将自定义操作作为NT Authority \ System运行,因为它不会访问网络资源。 在启用了UAC的Vista / 2008上,如果NoImpersonate处于关闭状态,则它将作为执行用户运行,但具有非特权令牌,并且无法访问本地资源,例如.installState。 请参阅UAC架构 任何人都知道一种方法 强制MSI使用提升的令牌运行,就像从提升的命令提示符运行一样? 强制CustomAction运行提升(清单中的requireAdministrator似乎不起作用)? 如果UAC已启用且未升级并且是否已警告或取消安装,请确定?