自定义操作配置如下:
自定义操作名称:MyCustomAction
VBScript文件名:
<PathVar01>\MyFolder\MyVBSfile.vbsScriptFunction:MyFunction
返回处理:同步(检查退出代码)
脚本执行:立即执行
它通过以下InstallScript代码执行:
result = MsiDoAction(ISMSI_HANDLE,"MyCustomAction");
Run Code Online (Sandbox Code Playgroud)
当安装程序在InstallScript中到达该行时,安装程序会显示错误警告,说明:
"错误1720.此Windows Installer程序包存在问题.无法运行此安装所需的脚本.请与您的支持人员或程序包供应商联系."
MsiDoAction返回的结果代码是'1603',根据winerror.h,它是:
//
// MessageId: ERROR_INSTALL_FAILURE
//
// MessageText:
//
// Fatal error during installation.
//
#define ERROR_INSTALL_FAILURE 1603L
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我开始怀疑文件是否正确包含在内.然而,我指向正确的文件,我已经尝试通过InstallShield支持文件包含VBS,认为这将确保文件与设置一起出现,但结果相同.
如何更改VS2008安装项目的默认输出路径?
它现在安装到Program Files\myOldProjectName中.
我们使用Visual Studio 2008上的工具创建了一个MSI安装程序.
这有一些在Installer类中实现的自定义操作.
它适用于所有测试服务器,但由于某种原因,它在一个生产服务器中失败.错误消息是:
错误.1001.用法:InstallUtil [/ u |/uninstall] [option [..]] assembly [[option [...]] assembly]
installUtil在每个给定的程序集中执行安装程序.||如果/ u或/ uninstall开关是......
我有一个构建exe的.NET项目(VS2008 .NET 3.5).我有一个安装程序项目作为同一解决方案的一部分,为该exe创建安装程序.
在安装程序的文件系统中,我在用户程序菜单下为我的应用程序创建了一个文件夹.在该新文件夹中,我转储.exe和.exe.config.我还在同一文件夹中创建快捷方式,并在桌面上创建快捷方式.通过右键单击"应用程序的主输出(活动)"并选择"从应用程序创建主要输出的快捷方式(活动)"来创建快捷方式.
一切安装都很好.如果我点击.exe它运行正常.当我点击任何一个快捷方式时,它会弹出这个带有进度条的小"安装"弹出窗口.我不知道它来自哪里或它在做什么.
有任何想法吗?
我正在使用WiX 3.0.我正在尝试在升级时预先设置所有注册表设置.
我找到了以下链接 http://www.mail-archive.com/wix-users@lists.sourceforge.net/msg28844.html
我更喜欢使用Property和RegistrySearch方法而不是自定义操作方法,因为我觉得它看起来更简单.
不幸的是,这种方法对我来说效果不佳.我的项目有一些DWORD和SZ类型的注册表值.对于所有DWORD类型的注册表值,它在前面附加一个#.我检查了WiX推荐手册.这就是RegistrySearch的工作方式.
因此,升级后,结果是我的所有DWORD类型注册表都更改为SZ.该值看起来相同,只是前面附加了#.例如,我在注册表值"LogLevel"中获得值为DWORD的值2.升级后,我在注册表值"LogLevel"中获得值"#2",类型为SZ在同一位置.
这是代码片段
<Property Id='LOG_LEVEL' Value='Information'>
<RegistrySearch Id='LogLevelRegistry' Type='raw' Root='HKLM' Key='Software\Company\Product' Name='LogLevel' Win64='$(var.Win64)'/>
</Property>
<Component Id="RegistryKey">
<RegistryKey Root='HKLM' Key='Software\Company\Product' Action='createAndRemoveOnUninstall'>
<RegistryValue Type='int' Name='LogLevel' Value='[LOG_LEVEL]'/>
</RegistryKey>
</Component>
Run Code Online (Sandbox Code Playgroud)
我想知道是否有任何字符串函数可以帮助我修复LOG_LEVEL属性中的"#"然后再放回去.或者在升级时是否有更智能的方法来保留注册表项?我应该采用自定义操作方法吗?
我发现这篇文章描述了如何找到办公室的安装路径:
http://support.microsoft.com/kb/234788/en-us
但是在文章中只有2007年的GUID,办公室2010的GUID是什么,或者我在哪里可以找到它们?
我有使用Visual Studio 2005创建的默认应用程序设置。安装我的应用程序后,它只能以管理员身份运行,因为某些文件写入了“应用程序文件夹”中。
我发现在Visual Studio 2010上,有一个属性可以更改应用程序文件夹内某些文件夹的此权限。
如何允许我的应用程序在不以admin身份运行的情况下在应用程序文件夹中创建和编辑特定文件?
我有一个用WiX编写的简单msi安装本机NT服务.在我对msi进行了一些更改后,它在StartServices标准操作失败,错误"服务无法启动,验证您有足够的权限".如果我按Ignore并手动启动服务,则它会成功启动.问题绝对不在于权限不足.如何诊断/调试此类问题?Windows Installer的详细日志似乎不包含任何有用的信息.
我在2年前创建了一个WiX文件,其中包含对特征操作值5的检查.
值5应指示重新安装/修复,但我找不到任何WiX/msi文档.我发现的页面最多可达4,就像在MSDN上一样.
<!-- always install if feature will be installed/reinstalled local -->
<Custom Action="MyInstallAction" After="InstallFiles">
<![CDATA[(&ca_feature=3) OR (&ca_feature=5)]]> <!-- <<< HERE -->
</Custom>
<!-- remove if feature is going from local to absent -->
<Custom Action="MyUninstallAction" After="RemoveRegistryValues">
<![CDATA[(&ca_feature=2) AND (!ca_feature=3)]]>
</Custom>
<Custom Action="UninstallUsbBusDriver" After="RemoveRegistryValues">
<![CDATA[(&ca_feature=2) AND (!ca_feature=3)]]>
</Custom>
Run Code Online (Sandbox Code Playgroud)
我开始怀疑是否曾经使用过5值,但是我再次发现很难相信我没有理由把它放在那里.
卸载我的应用程序时,如果它正在运行,它会尝试停止它:
遗憾的是,自动关闭并不真正起作用,它显示以下错误:
我的应用程序消失了,窗户,托盘栏图标,它们都消失了.但我仍然可以在流程列表中看到它们.
我猜测Windows向应用程序发送信号以便正常退出并且UI会这样做,但是有一些挥之不去的线程阻止进程终止.
Windows Installer如何在卸载期间关闭应用程序?
一旦我知道这一点,我想在调试我的应用程序时模拟它,看看发生了什么.这是一个合理的计划吗?
windows windows-installer restartmanager windows-restart-manager