我希望能够在我的 C# .NET 4.0 项目中的一个地方更改一个值。为此,我使用内置Properties/Settings.settings
文件,它本质上是一个 XML 文件。
由于我们对我们的软件使用 InnoSetup(这很常见),并且由于settings.settings
文件是 C# .NET 应用程序存储值的默认方式,我想知道InnoSetup 脚本是否有办法从设置文件,或者您是否可以将我指向一个可以执行此操作的脚本来设置设置脚本的变量。
编辑:
我运行了 XML 示例,但现在我无法使用 XPath 查询来获取正确的节点。这是我的脚本:
[Code]
{--- MSXML ---}
const
XMLFileName = '..\CCFinderWPF\Properties\Settings.settings';
XMLFileName2 = '..\CCFinderWPF\Properties\Settings.xml';
function Settings(Default: String): String;
var
XMLDoc, SeekedTopNode, SeekedNode, iNode, Sel: Variant;
Path, XPath: String;
begin
{ Load the XML File }
try
XMLDoc := CreateOleObject('MSXML2.DOMDocument.4.0');
except
RaiseException('Please install MSXML first.'#13#13'(Error ''' + GetExceptionMessage + ''' occurred)');
end;
XMLDoc.async := False;
XMLDoc.resolveExternals := false;
XMLDoc.preserveWhiteSpace := true;
XMLDoc.setProperty('SelectionLanguage', 'XPath');
XMLDoc.load(XMLFileName);
if XMLDoc.parseError.errorCode <> 0 then
RaiseException('Error on line ' + IntToStr(XMLDoc.parseError.line) + ', position ' + IntToStr(XMLDoc.parseError.linepos) + ': ' + XMLDoc.parseError.reason);
MsgBox('XML-File: ' + XMLFileName, mbInformation, MB_OK);
{ Modify the XML document }
iNode := XMLDoc.documentElement;
iNode := iNode.selectSingleNode('Setting[@Name="' + Default + '"]');
// **selectSingleNode returns null, seems that selectSingleNode with XPath doesn't work?**
MsgBox('The Node is: ' + iNode.nodeName, mbInformation, MB_OK);
SeekedNode := iNode.firstChild;
Result := SeekedNode.lastChild.text;
MsgBox('The XPath is: ' + XPath, mbInformation, MB_OK);
end;
我使用 Inno Setup Precompiler 调用这个函数,如下所示:
#define ABAppName "{code:Settings|AppName}"
XML 文件如下所示:
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="CCFinder.Properties" GeneratedClassName="Settings">
<Profiles />
<Settings>
<Setting Name="AppName" Type="System.String" Scope="Application">
<Value Profile="(Default)">CCFinder</Value>
</Setting>
...
所有这一切的目标是我可以从我的 C# 项目中的 Settings.settings 文件在我的应用程序中设置值,让我的 hudson 实例检查我的代码并为不同版本的应用程序更改此 XML 文件,例如更改一些值我不需要在设计时知道。我希望能够从这个 XML 文件中提取我的变量。我只是在这里使用 MSXML2。任何帮助将不胜感激。