2015-08-07 5 views
-1

У меня возникли некоторые проблемы с тем, чтобы этот код функционировал правильно. То, что я пытаюсь выполнить, - это использование пользователем ConnectionString (во время установки) и его мест в уже отформатированном файле. Файл Local.config находится в каталоге {app} \ local. Мне удалось заставить его работать несколько раз в директоре {app}, но теперь у меня ничего нет.Как изменить Local.config из сценария Innosetup

Source: "Local\Local.config"; DestDir: "{app}\Local"; AfterInstall: ConvertConfig('Local.config'); Flags: ignoreversion 

var 
    UserPage: TInputQueryWizardPage; 
    xmlFileName: String; 

procedure InitializeWizard; 
begin 

    UserPage := CreateInputQueryPage(wpWelcome, 
    'Pryme Connection String', 'SQL Connecton String', 'Please Enter In SQL Connection String then click Next.'); 
    UserPage.Add('connectionString:', False); 

end; 
procedure ConvertConfig(xmlFileName: String); 
    var 
     xmlFile: String; 
     xmlInhalt: TArrayOfString; 
     strName: String; 
     strTest: String; 
     tmpConfigFile: String; 
     k: Integer; 
    begin 
      xmlFile := ExpandConstant('{app}') + '\' + 'Local.config'; 
     tmpConfigFile:= ExpandConstant('{app}') + '\config.tmp'; 
     strName := UserPage.Values[0]; 

      if (FileExists(xmlFile)) then begin 
      //alles in string array speichern 
      LoadStringsFromFile(xmlFile, xmlInhalt); 
      //durch Array iterieren 
      for k:=0 to GetArrayLength(xmlInhalt)-1 do 
       begin 
       strTest := xmlInhalt[k]; 
        if (Pos('name="Pryme"', strTest) <> 0) then 
        begin 
         strTest := ' <add name="Pryme" connectionString="' + strName + '"/> '; 
        end; 
       SaveStringToFile(tmpConfigFile, strTest + #13#10, True); 
      end; 

      DeleteFile(xmlFile); //delete the old exe.config 
      RenameFile(tmpConfigFile,xmlFile); 

      end; 
    end; 

ответ

-1

Я не указал на правильный каталог. Ниже приведен правильный рабочий код.

Source: "Local\Local.config"; DestDir: "{app}\Local"; AfterInstall: ConvertConfig('Local.config'); Flags: ignoreversion 



    var 
     UserPage: TInputQueryWizardPage; 
     xmlFileName: String; 

    procedure InitializeWizard; 
    begin 

     UserPage := CreateInputQueryPage(wpWelcome, 
     'Pryme Connection String', 'SQL Connecton String', 'Please Enter In SQL Connection String then click Next.'); 
     UserPage.Add('connectionString:', False); 

    end; 
    procedure ConvertConfig(xmlFileName: String); 
     var 
      xmlFile: String; 
      xmlInhalt: TArrayOfString; 
      strName: String; 
      strTest: String; 
      tmpConfigFile: String; 
      k: Integer; 
     begin 
       xmlFile := ExpandConstant('{app}\local') + '\' + 'Local.config'; 
      tmpConfigFile:= ExpandConstant('{app}\local') + '\config.tmp'; 
      strName := UserPage.Values[0]; 

       if (FileExists(xmlFile)) then begin 
       //alles in string array speichern 
       LoadStringsFromFile(xmlFile, xmlInhalt); 
       //durch Array iterieren 
       for k:=0 to GetArrayLength(xmlInhalt)-1 do 
        begin 
        strTest := xmlInhalt[k]; 
         if (Pos('name="Pryme"', strTest) <> 0) then 
         begin 
          strTest := ' <add name="Pryme" connectionString="' + strName + '"/> '; 
         end; 
        SaveStringToFile(tmpConfigFile, strTest + #13#10, True); 
       end; 

       DeleteFile(xmlFile); //delete the old exe.config 
       RenameFile(tmpConfigFile,xmlFile); 

       end; 

     end; 
+0

Это далеко не правильный выбор. Для обработки XML-файлов вы должны использовать синтаксический анализатор XML. – TLama

+0

@TLama Извините, вы так себя чувствуете. Я вытащил данные от другого человека на этом форуме и был изменен для моих нужд. Пожалуйста, предложите лучшее решение. – TimorDomini

+0

Не беспокойтесь. Я просто отвечал на ваше утверждение, что это правильно. Это не. То, что это работает, не означает, что оно правильно. [downvotes не мои] – TLama

 Смежные вопросы

  • Нет связанных вопросов^_^