Inno setup 在Inno设置中解析wmic的输出

Inno setup 在Inno设置中解析wmic的输出,inno-setup,pascalscript,Inno Setup,Pascalscript,我最近在Java软件中使用了Inno设置。我正在编写一个函数,通过调用wmic printer get name/All并读取其输出来检查打印机驱动程序是否存在。但问题是,当我通过Pos()读取文本文件并检查它是否包含特定的子字符串时,它总是返回0,但当我尝试使用字符进行测试时,它返回了真值。我目前使用的是5.6.1版Unicode 我已经看过了,但我认为这不是我的情况: 我是这样做的: 函数isContainedFile(文件,子字符串:String):布尔值; 变量 线条:柏油纹; i:整数

我最近在Java软件中使用了Inno设置。我正在编写一个函数,通过调用
wmic printer get name/All
并读取其输出来检查打印机驱动程序是否存在。但问题是,当我通过
Pos()
读取文本文件并检查它是否包含特定的子字符串时,它总是返回0,但当我尝试使用字符进行测试时,它返回了真值。我目前使用的是5.6.1版Unicode

我已经看过了,但我认为这不是我的情况:

我是这样做的:

函数isContainedFile(文件,子字符串:String):布尔值;
变量
线条:柏油纹;
i:整数;
行:字符串;
开始
子字符串:=大写(子字符串);
结果:=假;
如果LoadStringsFromFile(文件,行),则
开始
对于i:=0到GetArrayLength(行)-1 do
开始
行:=行[i];
如果(长度(直线)=0),则
继续;
行:=大写(修剪(行));
Log('Substring:'+Substring+',Line:'+Line+',Pos:'+IntToStr(Pos(Substring,Line)));
如果(位置(子字符串,行)为0),则
开始
结果:=真;
打破
结束;
结束;
结束;
结束;
这就是我如何调用
isContainedInFile()

函数IsBrotherDriverInstalled():布尔值;
变量
路径、兄弟路径、ListPrinterPath、ListPrinter:String;
检查,索引:整数;
开始
ListPrinterPath:=ExpandConstant('{tmp}\printerlist.tdm');
{暂时保存列表}
Exec(ExpandConstant(“{cmd}”),“/c wmic printer get name/All>”“+ListPrinterPath+”,
'',SW_隐藏,EWWAIT未过滤,检查);
{检查列表中是否有打印机}
结果:=isContainedFile(ListPrinterPath,PrinterName);
{删除文件}
删除文件(ListPrinterPath);
结束;

下面是当子字符串的长度大于1时的输出:


当子字符串的长度=1时:


提前感谢。

wmic在其输出中使用UTF-16编码
LoadStringsFromFile
不支持UTF-16编码。看

因此,文件读取错误

您似乎正在使用Inno Script Studio IDE。它的消息控制台不能准确地打印消息,因此它混淆了真正的问题。如果您使用原始Inno安装编译器IDE或检查物理日志文件,您会立即看到问题:

2018-08-26 10:44:35.783   Substring:BROTHER, Line:ÿþN A M E, Pos:0
2018-08-26 10:44:35.783   Substring:BROTHER, Line:, Pos:0
2018-08-26 10:44:35.783   Substring:BROTHER, Line:S E N D   T O   O N E N O T E   2 0 1 6, Pos:0
2018-08-26 10:44:35.783   Substring:BROTHER, Line:, Pos:0
2018-08-26 10:44:35.783   Substring:BROTHER, Line:S A M S U N G   S C X - 3 4 0 0   S E R I E S   ( U S B 0 0 1 ), Pos:0
2018-08-26 10:44:35.783   Substring:BROTHER, Line:, Pos:0
2018-08-26 10:44:35.783   Substring:BROTHER, Line:M S   P U B L I S H E R   C O L O R   P R I N T E R, Pos:0
2018-08-26 10:44:35.783   Substring:BROTHER, Line:, Pos:0
2018-08-26 10:44:35.783   Substring:BROTHER, Line:M I C R O S O F T   X P S   D O C U M E N T   W R I T E R, Pos:0
2018-08-26 10:44:35.783   Substring:BROTHER, Line:, Pos:0
2018-08-26 10:44:35.783   Substring:BROTHER, Line:M I C R O S O F T   P R I N T   T O   P D F, Pos:0
2018-08-26 10:44:35.783   Substring:BROTHER, Line:, Pos:0
2018-08-26 10:44:35.783   Substring:BROTHER, Line:H P   E P R I N T   +   J E T A D V A N T A G E, Pos:0
2018-08-26 10:44:35.783   Substring:BROTHER, Line:, Pos:0
2018-08-26 10:44:35.783   Substring:BROTHER, Line:F A X, Pos:0
2018-08-26 10:44:35.783   Substring:BROTHER, Line:, Pos:0
2018-08-26 10:44:35.783   Substring:BROTHER, Line:, Pos:0

解决方案:

  • 正确读取UTF-16文件。看
  • 或者使文件采用ASCII编码。看
  • 尽管最好的解决方案是使用WMI类,而不是命令行工具。看

有人知道吗?什么叫“我试着用一个角色测试”?给我们看看
记录什么('Substring:'…
语句日志,就在测试失败之前,而你认为它不应该失败?-基本上,我们需要。嗨,我更新了我的帖子。你可以与我们共享该文件吗?+并向我们显示你对
isContainedInFile
?+你使用的Inno安装程序的哪个版本?Ansi或Unicode?我使用的是5.6.1版和所有Unicode。顺便问一下,我更新了我的帖子。真棒。你说得对,我使用的是Inno Script Studio,我应该使用原始编译器。谢谢!