安装程序设置一个默认数据库(如果尚不存在),我想从卸载过程中排除它(或者有一个用户选项删除它,一旦我花时间弄清楚自定义GUI)
似乎最佳实践似乎只是在运行时创建数据库而不是安装时间,但为了争论,这是可能的以及如何?
我知道如何将其设置为有条件地安装它:
<Feature Id="Database" Display="hidden" Level="1">
<ComponentRef Id="DatabaseComponent"/>
<!-- Cancels installing of new DB if it already exists-->
<Condition Level="0">DBEXISTS</Condition>
</Feature>
Run Code Online (Sandbox Code Playgroud)
但我不确定如何以卸载为条件.
方案是我们有一个客户端/服务器应用程序,客户端安装是使用Inno Setup的引导程序,从IP /端口号指定的服务器下载客户端.我们希望能够通过UDP广播检测本地网络上是否有服务器,并且可以编写一个控制台应用程序来执行此操作.问题是,我们如何将信息从控制台应用程序传递给安装程序?
我可以捕获返回代码,但这只能是一个int.据我所知,在Inno Setup中读取文件的唯一功能是在预处理器中,因此我们无法读取控制台应用程序在运行时创建的文件.我唯一能想到的是返回一个int,其中前4位是'.的位置和:在端口之前,然后解析出值,这似乎是hackish,flimsy和容易出错,特别是考虑到我对构造字符串的Inno Setup语法/函数并不熟悉.
有什么建议?
我可以将它们转换为列表,只使用带索引的常规for循环,但我想知道是否有办法将它们保持为IEnumerables.
基本上如果我做Xdoc.Load(文件名),做一些更改然后做Xdoc.Save(文件名)它只保存更改的东西,如插入或删除元素等,还是重新保存所有内容?
根据答案,我正在考虑确定我的应用程序是保存每次更改还是保存在显式保存和退出时.还要考虑是否要写入多个xml文件或只是将所有内容保存在一个大文件中.我不知道一个大文件会有多大,但我怀疑它可能是10的MB,所以如果它重新保存整个文件,那么我绝对不能在保留一个大文件的同时保存每个更改.
如果它确实保存了整个文件,那么是否有人对每个实体(可能是数百个)都有一个单独的xml文件以及它是否是个好主意?
如果我的表名为Table,看起来像这样:
A B
1 2
3 2
2 1
etc...
Run Code Online (Sandbox Code Playgroud)
这意味着1喜欢2,3喜欢2,2喜欢1 ...假设它比这要大很多,我怎么写一个SQL查询,我报告哪里A喜欢B,但B不喜欢A?
因此,对于这种情况,示例输出应该是:
3 2
Run Code Online (Sandbox Code Playgroud)
因为3从关系中喜欢2,但是2不喜欢3.
c# ×2
foreach ×1
ienumerable ×1
inno-setup ×1
linq-to-xml ×1
postgresql ×1
return-value ×1
save ×1
sql ×1
uninstall ×1
wix ×1
xml ×1