如何将文件添加到InstallShield组件,指定InstallShield项目的相对路径,以便在不同的计算机上轻松编译项目?
我有一个使用Visual Studio 2010构建的安装项目.
安装程序在将应用程序及其所有依赖项安装到正确的子目录和程序数据目录方面工作正常.
但是,我注意到安装程序创建的每个目录(根文件夹及其所有子目录)都不提供"写入"权限.添加到"用户"组目录的唯一权限是:
无论用户是否将应用程序安装为"管理员",都会发生这种明显的默认权限设置.
对我来说,安装程序没有给正在安装的应用程序使用的文件夹赋予"写入"权限,这似乎很奇怪 - 安装程序在ProgramData应用程序数据库的文件夹中创建的文件夹更加令人困惑.获得"写"权限.
我的问题是,有没有办法配置安装项目,以便在创建文件夹时,我们可以告诉它提供什么类型的权限以及向谁提供.在我的情况下,我需要提供(应用程序的)根目录及其所有子目录,以及放置在ProgramData"用户组"的"读/写"文件夹文件夹中的文件夹.从技术上讲,我很乐意向"用户组"提供"完全控制"目录.
我有一个自定义操作,需要低于将安装文件夹中的某些部分复制到VS2010文件夹的值
VS2010DEVENV属性)INSTALLLOCATION属性)为了提供足够的权限,我将自定义操作设置为Execute='deferred' Impersonate='no'.但是在运行安装程序时,它会记录以下消息:
无法从非立即自定义操作访问会话详细信息
看来我们无法在"延期"自定义操作中访问属性(即session["VS2010DEVENV"])
有没有其他方法可以根据需要检索这些值?
我不是最好的程序员,所以我发现将程序编写为几个单独的可执行文件会更容易,这些可执行文件偶尔会相互调用.但是现在我需要一种简单的方法来实际运行它们,而无需编写像运行文件一样的详细指令,等到它完成并且在运行文件二之前不再处于进程管理器中,文件三可以在创建文件二之后15秒执行.然后将一个密钥添加到您的注册表.等等.我认为必须有一个好的软件,我可以放下我的所有exes,告诉它何时运行它们,并输出一个文件供我的客户运行.有任何想法吗?
我有一个使用Wxs 3.0创建的MSI文件.我的MSI引用了一个C#自定义操作,使用新的C#Custom Action项目编写.
我想将一个参数传递给msiexec,该参数被路由到我的自定义操作 - 例如:
msiexec/i MyApp.msi ENVIRONMENT = TEST#
在我的.wxs文件中,我引用了我的自定义操作:
<Property Id="ENVIRONMENT"/>
<Binary Id="WixCustomAction.dll" SourceFile="$(var.WixCustomAction.Path)" />
<CustomAction Id="WixCustomAction" BinaryKey="WixCustomAction.dll" DllEntry="ConfigureSettings"/>
<InstallExecuteSequence>
<Custom Action="WixCustomAction" After="InstallFiles"></Custom>
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)
我的C#自定义操作设置如下:
[CustomAction]
public static ActionResult ConfigureSettings(Session session)
{
}
Run Code Online (Sandbox Code Playgroud)
我原以为能够像这样访问该物业:
string environmentName = session.Property ["ENVIRONMENT"];
但这似乎不起作用.
如何访问我在自定义操作中传递给msiexec的属性?
我们正在开发Visual Studio 2005中的winforms应用程序,我们创建的安装项目同时输出MSI和EXE.我们不确定EXE文件的用途是什么,因为我们可以在没有EXE的情况下安装.
我需要显示一个WiX 3脚本才能显示2个对话框:欢迎和完成.这是不需要EULA,文件夹选择等所有帮助赞赏.
我想在wix项目生成的msi文件的文件名中包含一些动态部分.这个动态部分应该由变量控制,这些变量是我的wix项目的一部分,并且声明如下:
<?define ProductVersion="7.1.0.1" ?>
Run Code Online (Sandbox Code Playgroud)
有没有人知道将wix变量的值发送给链接器以将其用作输出文件名的一部分的方法?
顺便说一下:我正在使用Wix3
我正在尝试自动卸载使用WiX创建的软件包,以便更改已安装的软件堆栈和配置,而无需重新配置整个操作系统.最终我将使用powershell脚本来执行此操作,但目前我似乎无法使用cmd以交互方式卸载我的测试包.
如果我跑:
msiexec /x '{A4BFF20C-A21E-4720-88E5-79D5A5AEB2E8}'
msiexec /x A4BFF20C-A21E-4720-88E5-79D5A5AEB2E8
我明白了:
"无法打开安装包.验证包是否存在以及您是否可以访问它,或联系应用程序供应商以验证这是否是有效的Windows Installer程序包."
如果我跑:
msiexec /x {A4BFF20C-A21E-4720-88E5-79D5A5AEB2E8}
我明白了:
"此操作仅对当前安装的产品有效"
我查看了Windows安装程序指南,WiX文档,msiexec文档,并使用orca自己查看.msi,但我还没有找到任何可以清楚地了解卸载处理方式的内容.是否需要.msi文件,如果没有,那么为什么Windows安装程序在给出GUID时似乎认为它是?
.msi安装程序的WiX代码是:
<?xml version='1.0' encoding='windows-1252'?>
<Wix xmlns='htp://schemas.microsoft.com/wix/2006/wi' >
<!--DO NOT COPY / PASTE THE PRODUCT ID GUID BELOW TO YOUR OWN WIX SOURCE -->
<Product Id='A4BFF20C-A21E-4720-88E5-79D5A5AEB2E8' Language='2057'
Manufacturer='COMPANYNAME IT-Operations'
Name='COMPANYNAMEServerListener' Version='1.0.0'
UpgradeCode='PUT-GUID-HERE'>
<Package Id='*' Manufacturer='COMPANYNAME IT-Operations' Compressed='yes' />
<Media Id='1' Cabinet='COMPANYNAMEServerListener.cab' EmbedCab='yes' />
<Directory Id='TARGETDIR' Name='SourceDir'>
<Directory Id='ProgramFilesFolder' Name='PFiles'>
<Directory Id='COMPANYNAME' Name='COMPANYNAME'>
<Directory Id='INSTALLDIR' Name='COMPANYNAMEServerListener'>
<Component Id='MainExecutable' Guid='*' > …Run Code Online (Sandbox Code Playgroud)