在尝试在发布版本之上安装Debug版本时,我遇到了一些自定义操作无法正常工作(并导致安装损坏)的问题,反之亦然。因此,我想完全阻止此类升级,并强制用户先手动卸载。
到目前为止,我有这个:
<?if $(var.Configuration) = Debug?>
<?define DisallowUpgrade = "yes"?>
<?else?>
<?define DisallowUpgrade = "no"?>
<?endif?>
<MajorUpgrade Disallow="$(var.DisallowUpgrade)" ... />
这会强制用户在安装Debug版本时始终先卸载(这很好)。但是,它不会阻止Release版本尝试升级Debug版本。我怎么能这样做?
谢谢!
P.S。在我打字的时候,我只是想增加Debug版本的版本号 - 比如增加100。这可行,但可能导致与QA人员的混淆,所以我更喜欢更清洁的方式。
答案 0 :(得分:2)
为什么“用户”会知道调试/发布版本是什么? IMO用户应该只看到发布版本。
我建议构建调试MSI并将MSI作为两个不同的产品发布(如果你想并排安装,升级代码甚至目标目录),调试只能升级调试,发布只能升级版本,只发布MSI曾向客户敞开大门。
当然,自定义操作越少越好。 :)
答案 1 :(得分:0)
将#include <sstream>
std::ifstream file( fileName );
if ( file ) { //Check open correctly
std::stringstream ss;
ss << file.getline();
int a, b, c;
ss >> a >> b >> c;
}
写入注册表,使用class A{
@Embedded
private B objB;
}
@Embeddable
class B{
Integer x;
Integer y;
float z;
}
加载它,并使用$(var.Configuration)
将注册表中的内容与RegistrySearch
的当前值进行比较。