WIX:自定义以设置文件夹权限
我们正在使用WIX将ASP.NET代码捆绑到MSI安装程序中,我们需要设置[Computername] \ iis_wpg组以在"安装目录"下的文件夹(名为" CO")上修改权限.安装后,目录结构看起来像这样 C:\inetpub\wwwroot\MyApp\CO CO文件夹实际上是.NET解决方案文件的一部分,并且当应用程序捆绑到MSI中时,CO文件夹会自动包含CO文件夹,因为其下面有XML文件标记为"内容"(这意味着这意味着我不需要明确使用CreateFolder来创建MyApp下面的CO文件夹).这些XML文件由应用程序更新,这就是IIS_WPG需要修改权限的原因. 我的问题是,如何在CO文件夹上设置权限?我认为我可能能够创建文件夹以尝试覆盖默认包含的任何权限,但没有设置权限 - 我猜是因为这是因为我要创建的文件夹被实际文件夹覆盖MSI,从而覆盖我设置的权限. 我认为我可能需要创建一个定制功能,该自定义在安装之前在某个时刻执行,但是我迷路了,因为我不明白如何将
6 2023-05-25
编程技术问答社区
文件夹权限。给予所有用户完全的控制权
我正在研究一个将某些文件存储在CommonApplicationData文件夹中的应用程序.我的应用程序必须修改这些文件.我设法创建了一个自定义操作,以在CommonApplicationData文件夹中授予我的应用程序文件夹的权利.但这并不能解决非Admin用户的问题.当我作为用户登录并尝试修改以下文件之一时,我会收到"访问拒绝"消息. 我怎么解决这个问题?谢谢. 这是我在自定义操作中使用的代码: public void GetUsers() { SelectQuery sQuery = new SelectQuery("Win32_UserAccount", "Domain='" + System.Environment.UserDomainName.ToString() + "'"); try { ManagementObjectSearcher mSe
0 2023-05-25
编程技术问答社区
DTF正在复制自定义动作dll文件
我有在installshield中创建的MSI设置,我正在执行DTF自定义操作DLL作为提交自定义操作.如果我将MessageBox.Show插入自定义操作中,我可以看到[ProgramFilesDir]中有一个临时文件夹,称为" customActionProject.ca.dll-",并且有复制的customActionProject.ca.dll,其中及其所有参考. 有什么方法可以告诉技术不要创建此temp文件夹并提取+在同一文件夹中执行customActionProject.ca.dll,在哪里.ca.dll位于哪里? 编辑: 我发现我无法通过配置wix.ca.targets中包含.ca.dll中的参考.在我的情况下,可以防止.ca.dll包含20MB的DLL. 现在,我想确保customActionProject.dll能够查看产品中安装的引用. 文件是:
12 2023-05-23
编程技术问答社区
解决 '配置对象是只读的,因为它已经通过调用ServerManager.CommitChanges()'提交?
我已经为安装程序项目编写了一个自定义操作,该项目执行以下操作: 检查现有的网站以查看是否存在与同名put相同的名称 用户. 如果不存在,则在IIS中创建网站. 创建一个应用程序池. 将应用程序池分配到创建的网站. 在分配应用程序池时,我会得到错误: 仅读取配置对象,因为它已被合作 通过致电servermanager.commitchanges().如果写入访问是 需要,使用ServerManager获取新的参考. 这让我感到困惑,因为似乎表明我无法用servermanager.commitchanges()呼叫分配新创建的应用程序池.但是,使用此功能一切正常,我不会期望这是一个问题. 这是我的代码: 我有一个像这样创建的ServerManager实例: private ServerManager mgr = new ServerManager(); 在我的安装方法中,我执行以下操作: Site site = CreateWebsi
6 2023-05-22
编程技术问答社区
如何在IOS中把自定义视图置于另一个视图之上
我想在UIViewController上实现以下自定义视图.什么是最佳的方法来实现它,而不是使用addSubview我想更好地使用一些东西. 我以前使用以下内容,但我想现在更好地使用一些东西 [self.view addSubview:NotConnected.view]; [self.view removeFromSuperview]; 我已经使用 AlertView . 我不喜欢使用库,因此如何通过另一个图像所示,可以通过另一个UIViewController自定义UIViewController.我使用 - (IBAction)ContinueToPayment:(id)sender { PayByVC *Newpage = [[PayByVC alloc] initWithNibName:@"PayByVC" bundle:nil]; Newpage.checkOutInfoDict=checkOutDict; Newpage
0 2023-05-04
编程技术问答社区
在customaction中没有捕获System.IO.Directory.Delete的异常。
System.IO.Directory.delete的异常未捕获(使用Wix Toolset生成的MSI) 出现在.NET Framework 4.7.2 Windows 7以管理员的身份开始. 自定义呼叫的logfile: msi(s)(a0:d8)[08:31:39:027]:执行OP:ActionStart(name = CacheCustomactions.deleteOldInstallationFolders,) MSI (s) (A0:D8) [08:31:39:027]: Executing op: CustomActionSchedule(Action=CacheCustomActions.DeleteOldInstallationFolders,ActionType=1025,Source=BinaryData,Target=DeleteOldInstallationFolders,CustomActionData=XXXDIR=C:\XXX \;)
16 2023-04-20
编程技术问答社区
如何在安装过程中为MSI中的当前登录用户(或任何其他本地用户)设置文件夹共享权限?
使用的包装工具:wix. 自定义操作用C ++编写. 在安装过程中,我的MSI在programData内部创建一个文件夹" x",到安装结束时,我需要使文件夹共享访问登录的当前用户(或PC中的任何本地用户此输入将在此期间提供.安装),我找不到任何可以帮助我的WIX元素或C ++ API. 我在Wix I中使用元素可以找到文件夹的权限(文件夹属性的安全选项卡),但是我找不到WIX元素/C ++ API来提供共享权限.(文件属性共享选项卡) 现在,如果您看到"每个人"已读取访问权限,通过我的MSI,我应该能够在共享中提供任何用户的完整访问(完全控制). 解决方案 wix在其util扩展中具有此功能: https ://github.com/wixtoolset/Util.wixext/blob/25973d520d0e5102421549bae8f3e17b720485e9/src/test/WixToolsetTest.Util/TestData/Using
10 2023-04-14
编程技术问答社区
Wix CustomAction更新UI?
如果我有托管WIX自定义操作,是否可以使用文本类型更新控件?我看到可以通过使用InstallMessage.Progress使用session.Message来更新进度条,但是我看不到更新其他UI的方法. 解决方案 对于文本控制 然后在您的CA中您可以说session [" someprop"] =" someValue".请注意,MSI对刷新UI很糟糕,因此您几乎必须从一个对话框过渡到另一种对话才能使其工作.换句话说,在上一个对话框的下一个按钮上调用CA,在下一个对话框中,文本控件将显示文本. 其他解决方案 我找到了一个解决方案来完成此操作,而无需过渡对话框才能更新. 在您的自定义操作中,设置属性.下面,我设置INSTALLFOLDER: [CustomAction] public static ActionResult SpawnBrowseFolderDialog(Session session) { session.Log("Started
8 2023-03-31
编程技术问答社区
向WiX自定义动作传递命令行参数
我们通过Windows Installer(MSI)安装了一个桌面应用程序,我们想添加一个自定义操作,当我们将通过LAUNCH_APP=1传递到cmd>. 所以我有一个vbs脚本,该脚本启动了启动安装MSI(主要升级)的BAT文件: vbs脚本: Set WshShell = CreateObject("WScript.Shell") Const TemporaryFolder = 2 Dim fso: Set fso = CreateObject("Scripting.FileSystemObject") Dim tempFolder: tempFolder = fso.GetSpecialFolder(TemporaryFolder) WshShell.Run chr(34) & WScript.Arguments(0) & chr(34) & chr(32) & chr(34) & tempFolder & "\Lifen\update\LifenInstaller.
30 2023-03-22
编程技术问答社区
在.NET中自定义卸载动作(clickonce)。
对于使用ClickOnce安装的.NET应用程序,是否有任何方法可以在卸载过程中运行自定义操作. 具体来说,我需要删除一些相关的文件(我在第一次运行时创建的文件),并在卸载过程中调用Web服务. 有什么想法? 解决方案 无法使用ClickOnce本身来执行此操作,但是您可以创建一个标准设置.EXEBootstrapper,该Bootstrapper安装ClickOnce应用程序并具有自定义卸载操作. 请注意,这是在添加/删除程序中创建两个条目,因此您需要隐藏其中一个条目(Clickonce App). 您的最后一个问题将是Clickonce上没有"无声卸载"选项,因此您可以做这样的事情: On Error Resume Next Set objShell = WScript.CreateObject("WScript.Shell") objShell.Run "taskkill /f /im [your app process name]*"
18 2023-03-14
编程技术问答社区
在.MSI自定义动作中安装证书不能正常工作
我正在尝试在自定义操作中安装本地机器商店中的证书. 该证书已安装,但是当我使用它来查询AWS时,我会收到此错误: 对象仅包含公共半 关键对.私钥还必须 提供. 安装程序正在运行升高,目标是Windows Vista. 如果我使用单独的.exe安装完全相同的证书,则使用完全相同的代码,它可以正常工作. 那么,使用Windows安装程序安装证书时有什么不同? 代码: private void InstallCertificate(string certificatePath, string certificatePassword) { if (IsAdmin()) { try { X509Certificate2 cert = new X509Certificate2(certificatePath, certificatePassword, X509KeyStorageFlags.MachineKeySet
16 2023-03-09
编程技术问答社区
证书库中的证书私钥不可读
我认为我遇到了同样的问题喜欢这个人,但是我不像他/她那样幸运,因为提供的解决方案对我不起作用. 提供的解决方案提供了C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys上的文件( not 在子目录中)和C:\Users\[Username]\AppData\Roaming\Microsoft\Crypto\RSA(以及子目录) 但是,由于我希望设置将应用程序安装给所有用户,因此自定义操作在SYSTEM -user下运行,该操作是在C:\ProgramData\Application Data\Microsoft\Crypto\RSA\S-1-5-18中实际创建的文件beeing. . 运行"正常"应用程序作为admin(右键单击 - >作为admin运行)执行完全相同的代码时,在C:\Users\[Username]\AppData\Roaming\Microsoft\Crypto\RSA\S-1-5-21-1154405193-217
86 2023-03-09
编程技术问答社区
在Liferay中从一个重定向中发射Autologin信号
我有一个问题,试图在Liferay CE 6.1.1中启动自定义操作方法重定向时.让我解释一下场景. 功能方案1:直接POST动作 假设我有一个带有登录表单的公共页面A(带有用户名和密码),一个自动洛氏素类,用于执行一些检查和一个私人页面B,以显示适当的身份验证后显示一些数据. 我有一个JSP,其中包含登录表单在公共页面A中部署的Portlet中,如下所示(这是一个过度简化的版本): 按下提交按钮时,将启动自动素类,如果通过支票,则用户按预期的是私有页面中的降落. 非
6 2023-03-05
编程技术问答社区
如何保护MSI不被修改
我想保护MSI文件免受修改.可以使用ORCA或MSI API轻松完成.这很可悲,因为任何人都可以修改/添加/删除Windows安装程序自定义操作或具有管理权的属性. 有什么方法可以将MSI文件设置为某种仅阅读模式或以某种方式保护其内容? 解决方案 简短的答案是否,您不能阻止某人编辑.msi文件.您可以采用各种方法来最大程度地减少某人这样做的可能性,或者可以增加与任何编辑相关的困难的方法,但您不能完全阻止它. 要更好地回答这个问题,必须完善您要问的问题. "保护"听起来像是一种安全性问题,因此它有助于建立至少扶手椅威胁模型.例如,您可能要预防以下三件事: 有兴趣的用户更改安装到该用户系统的位 一个公司用户修改其系统管理员在用户的计算机上安装的内容 一个恶意政党改变并提供伪装成您的应用程序的位置,其他人错误地安装 在这三个中,第一个并不是真正的安全边界,因此您无能为力.要么是需要管理特权并拥有它们的安装,要么是每个用户安装,允许没有管理特权的用户可以使用它
20 2023-02-24
编程技术问答社区
抑制一个MSI错误代码
我得到error 2803: dialog view did not find a record for the dialog.因为我已经明确删除了安装程序的FilesInUse对话框.这是一个对话框,有时在有文件锁时通过msiexec要求进行演示.我的安装程序逻辑不会明确尝试显示此对话框.我的安装程序有自定义操作来杀死锁定文件的进程,因此忽略此消息然后进行安装绝不存在问题(但是对于此过程终止,我需要权限,因此必须进行延迟的自定义操作,该操作必须在对话框之后运行请求).对于我的所有意图和目的,此对话基本上都是无用的.当此错误代码出现在此错误代码时,我不必显示该错误代码时显示致命错误对话框?有谁知道是否有任何办法在Wix中通过C#自定义动作的形式做到这一点?有什么方法来捕获和处理错误代码? 解决方案 我认为您不能抑制该错误,除非您准备使用自己的UI并忽略FilesInuse对话框请求.或修改WIX代码,如果允许.基本上,您会收到消息并对它们做出反应: https://msdn
54 2023-02-22
编程技术问答社区
WiX安装程序是否依赖于.NET框架?
我有一个WIX安装程序,其中包含基于C#的自定义操作. 此安装程序是否需要在主机计算机上安装任何.NET框架才能执行这些C#自定义操作嵌入安装程序? 解决方案 是.与Java不同,使用之前需要安装,而不是简单地复制并使用.您需要安装.NET框架的版本C#库是为构建的,或者它与e.g.,Microsoft .NET Framework 2.0或4.0 Microsoft .NET .NET Framework完整配置文件完整配置文件. 由于版本3.6,Wix除了为作者提供工具并构建Windows Installer软件包(和其他相关文件)外,现在还提供Boottrapper/Downloader/cainder/Bundler,并具有重新启动处理能力和用于协调的卸载的软件包管理器,称为卸载烧伤. 您可以使用此类bootstrapper安装.NET 4.0框架,然后安装您的安装程序.请参阅此
8 2023-02-21
编程技术问答社区
如何在C#中获得一个设置项目的自定义动作数据?
我为我的服务创建一个Windows服务和设置项目. 在我的Windows服务中,我可以使我的客户操作数据对此表示考虑: Context.Parameters["dbname"] ,但我想访问我服务中的客户操作数据的价值以在我的项目中使用. 有人知道如何在C#? 中做到这一点 更新 在我的ProjectInstaller中: public ProjectInstaller() { InitializeComponent(); } public override void Install(IDictionary stateSaver) { base.Install(stateSaver); string dbName = Context.Parameters["dbname"]; AppHelper.Save(dbName+" "+ Context.Parameters["targetdir"].ToString());
6 2023-02-21
编程技术问答社区