Я недавно использовал Inno Setup для своего программного обеспечения Java. Я пишу функцию, чтобы проверить, существует ли драйвер принтера, вызывая wmic printer get name /All
и читая его вывод. Но проблема в том, что когда я читаю текстовый файл и проверяю, содержит ли он конкретную подстроку, Pos()
, он всегда возвращает 0, но когда я пытался проверить с символом, он возвращал истинное значение. В настоящее время я использую Unicode версии 5.6.1.
Я смотрел на Delphi Pos, всегда возвращающий 0 , но я думаю, что это не мой случай:
Вот как я это сделал:
function isContainedInFile(File, Substring: String): Boolean;
var
Lines: TArrayOfString;
i: Integer;
line: String;
begin
Substring := Uppercase(Substring);
Result := False;
if LoadStringsFromFile(File, Lines) then
begin
for i:= 0 to GetArrayLength(Lines) - 1 do
begin
line := Lines[i];
if (Length(line) = 0) then
continue;
line := Uppercase(Trim(line));
Log('Substring:' + Substring + ', Line:' + line + ', Pos:' + IntToStr(Pos(Substring, line)));
if (Pos(Substring, line) <> 0) then
begin
Result:= True;
break;
end;
end;
end;
end;
Вот как я назвал isContainedInFile()
:
function IsBrotherDriverInstalled(): Boolean;
var
path, brotherPath, ListPrinterPath, ListPrinter: String;
check, index: Integer;
begin
ListPrinterPath := ExpandConstant('{tmp}\printerlist.tdm');
{ Save temporarily the list }
Exec(ExpandConstant('{cmd}'), '/c wmic printer get name /All > "' + ListPrinterPath + '"',
'', SW_HIDE, ewWaitUntilTerminated, check);
{ Check if the list has the printer }
Result := isContainedInFile(ListPrinterPath, PrinterName);
{ Delete the file }
DeleteFile(ListPrinterPath);
end;
Вот мой вывод, когда длина подстроки> 1:
А когда подстрока имеет длину = 1:
Заранее спасибо.