Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Nouveau membre du Club
    [VS.Net][Framework] creer un setup incluant le framework
    Bonjour,

    J'ai une appli réalisé en VB.Net (VS.Net 2003).

    J'ai déjà créer un setup avec l'utilitaire de visual studio, mais maintenant j'aurais besoin d'inclure dans mon setup le framework (en installation "silencieuse").

    Le but est d'avoir un setup pour un PC potentiellement sans framework où l'utilisateur n'a qu'à cliquer sur suivant quelques fois.

    J'ai commencé à regarder les logiciels tel que Inno setup, setup creator ou setup2Go mais je ne sais pas lequel est le plus adapté (et s'ils permettent tous de le faire).

    J'ai besoin d'un outil facile à prendre en main, je ne peux pas passer plus d'une journée à faire ce setup.

    merci d'avance pour vos conseil.

  2. #2

  3. #3
    Nouveau membre du Club
    merci

    mais là j'ai un peu honte, j'ai chercher sur google et j'ai même pas penser à regarder les tutoriaux du site

  4. #4
    bouton résolu?
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  5. #5
    Nouveau membre du Club
    Citation Envoyé par pharaonix
    bouton résolu?
    pas tout de suite

    l'installation avec le framework fonctionne sans problème,

    mais serait il possible de faire l'installation du framework de façon transparente pour l'utilisateur ?
    (sans bouton à cocher et dans l'idéal ne pas voir les fenêtre)

  6. #6
    Membre expérimenté
    Citation Envoyé par plasticgoat
    Citation Envoyé par pharaonix
    bouton résolu?
    pas tout de suite

    l'installation avec le framework fonctionne sans problème,

    mais serait il possible de faire l'installation du framework de façon transparente pour l'utilisateur ?
    (sans bouton à cocher et dans l'idéal ne pas voir les fenêtre)
    je me suis déja poser aussi la question, mais je ne suis pas sur que cela soit possible, mais c'est a verifier.

    @+
    Someday I will be the most powerful Jedi !

    Freddyboy - Blog

  7. #7
    Nouveau membre du Club
    finalement, j'ai laissé tombé le setup de (projet de déploiement) intégré à visual studio qui n'est pas assez souple et j'ai créé un petit script pour Inno Setup.

    Pour l'instant j'installe systématiquement le framework mais au moins l'installation est vraiment silencieuse (aucune fenêtre).
    Je le perfectionnerai plus tard pour n'installer le framework que s'il n'est pas déjà installé (certaine personne l'on déjà fait faut que je regarde) et annuler l'install de l'application si l'install du framework echoue.

    S'il y en a qui sont interessé par mon script, je peux le poster.

  8. #8
    Nouveau membre du Club
    Citation Envoyé par Morpheus
    http://freddyboy.developpez.com/dotnet/articles/bootstrapper/
    A propos de cet article, à quoi sert le 'composant' MDAC ?
    J'ai également entendu parlé de 'Jet' (sur http://www.codeproject.com/dotnet/do...lerforinno.asp )

    est ce que c'est utilise lorsque l'on veut piloter Excel à partir d'une appli .Net ?

  9. #9
    Membre confirmé
    Citation Envoyé par plasticgoat

    S'il y en a qui sont interessé par mon script, je peux le poster.
    Oui s'il te plait
    mon blog http://www.3click-solutions.com/actualites/

    MCP VB.NET (70-305) - (70-306) - (70-310)
    Développeur PHP / Wordpress

  10. #10
    Membre expérimenté
    Citation Envoyé par plasticgoat
    Citation Envoyé par Morpheus
    http://freddyboy.developpez.com/dotnet/articles/bootstrapper/
    A propos de cet article, à quoi sert le 'composant' MDAC ?
    J'ai également entendu parlé de 'Jet' (sur http://www.codeproject.com/dotnet/do...lerforinno.asp )

    est ce que c'est utilise lorsque l'on veut piloter Excel à partir d'une appli .Net ?
    le composant mdac (Microsoft Data Access Components) est utiliser pour l'acces au base de données.

    @+
    Someday I will be the most powerful Jedi !

    Freddyboy - Blog

  11. #11
    Nouveau membre du Club
    Voilà

    C'est script assez basic pour Inno Setup Script.
    Pour télécharger Inno Setup Script :
    http://www.jrsoftware.org/isdl.php
    (Je vous conseil de télécharger le QuickStart Pack qui inclu l'interface graphique ISTool)
    Pour plus d'info -> google

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    [Setup]
    AppName=App Name
    AppVerName=App Name version 1.7
    DefaultDirName={pf}\App Name
    DefaultGroupName=App Name
    ;AppMutex= // info: http://www.jrsoftware.org/iskb.php?mutexsessions
    UninstallDisplayIcon=IconeVisa16x16_xp.ico
    AllowNoIcons=yes
    Compression=lzma/ultra
    InternalCompressLevel=ultra
    SolidCompression=yes
    AppModifyPath="{app}\appname-setup.exe" /modify=1
    WizardImageFile=compiler:WizModernImage-IS.bmp
    WizardSmallImageFile=compiler:WizModernSmallImage-IS.bmp
    SetupIconFile=Setup.ico
    ;Choisir 'none' pour la détection de la langue, permet d'avoir l'anglais par défaut 
    ;pour la boite de dialogue de sélection de la langue
    LanguageDetectionMethod =none
     
    [Tasks]
    Name: desktopicon; Description: {cm:CreateDesktopIcon}
     
    [Files]
    ;AfterInstall: Log('After MYPROG.HLP Install')
    Source: appname.exe; DestDir: {app}
    Source: Interop.Excel.dll; DestDir: {app}
    Source: Interop.Office.dll; DestDir: {app}
    Source: Interop.VBIDE.dll; DestDir: {app}
    Source: ZedGraph.dll; DestDir: {app}
    Source: dotnetfx.exe; DestDir: {app}\utils
    Source: langpack.exe; DestDir: {app}\utils
    Source: mdac_typ.exe; DestDir: {app}\utils
     
    [Icons]
    Name: {userdesktop}\App Name; Filename: {app}\appname.exe; WorkingDir: {app}; Tasks: desktopicon
    Name: {group}\App Name; Filename: {app}\appname.exe
     
    [Dirs]
    Name: {app}\util
    Name: {app}\don; Flags: uninsalwaysuninstall
     
    [Languages]
    Name: en; MessagesFile: compiler:Default.isl
    Name: fr; MessagesFile: compiler:Languages\French.isl
     
    [UninstallDelete]
    Name: {app}; Type: filesandordirs
     
    [Run]
    Filename: {app}\utils\dotnetfx.exe; Parameters: "/q /c:""install /l /q"""; MinVersion: 4.1.1998,4.0.1381sp6; Description: .NET 1.1 Install; Flags: skipifdoesntexist; StatusMsg: Installing Microsoft .NET 1.1... (This may take a few minutes)
    Filename: {app}\utils\langpack.exe; Parameters: "/q:a /c:""inst /q"""; MinVersion: 4.1.1998,4.0.1381sp6; Description: .NET 1.1 Install; Flags: skipifdoesntexist; StatusMsg: Installing Microsoft LangPack (This may take a few minutes)
    Filename: {app}\utils\mdac_typ.exe; Parameters: "/Q:A /C:""dasetup /Q:D /N"""; MinVersion: 4.1.1998,4.0.1381sp6; Description: .NET 1.1 Install; Flags: skipifdoesntexist; StatusMsg: Installing Microsoft MDAC (This may take a few minutes)
     
    [INI]
    Filename: appname.ini; Section: Default Value; Key: Dir; String: {app}\don
    Filename: appname.ini; Section: Default Value; Key: seuilP; String: 0,2
    Filename: appname.ini; Section: Default Value; Key: seuilV; String: 1000
     
    ;Section code[]
    ; Ici vous pouvez programmez des fonctions personnelles et/ou redefinir des fonctions utilisées
    ; par le setup. Langage utilisé: Pascal (Delphi), et d'autres je crois


    Je posterais les éventuelles améliorations que j'y apporterais.

  12. #12
    Nouveau membre du Club
    Bonjour,

    J'ai pas mal avancé sur le problème :

    Le setup test maintenant la présence du Framework 1.1
    S'il est présent, il installe l'application
    Sinon il installe le framework puis,
    - Si l'installation du framework réussie, il installe l'application
    - Si l'installation du framework échoue, un message est affiché et le setup est interrompu.

    Il reste encore des amélioration à apporter, mais ça avance.

    Voilà le nouveau script :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
     
    [Setup]
    AppName=AppXXX
    AppVerName=AppXXX version 1.9
    DefaultDirName={pf}\AppXXX
    DefaultGroupName=AppXXX
    ;AppMutex= // http://www.jrsoftware.org/iskb.php?mutexsessions
    UninstallDisplayIcon=IconeApp16x16_xp.ico
    AllowNoIcons=yes
    Compression=lzma/ultra
    InternalCompressLevel=ultra
    SolidCompression=yes
    ;AppModifyPath="{app}\AppXXX-setup.exe" /modify=1
    WizardImageFile=compiler:WizModernImage-IS.bmp
    WizardSmallImageFile=compiler:WizModernSmallImage-IS.bmp
    SetupIconFile=Setup.ico
    LanguageDetectionMethod=none
     
    [Tasks]
    Name: desktopicon; Description: {cm:CreateDesktopIcon}
     
    [Files]
    Source: AppXXX.exe; DestDir: {app}
    Source: Interop.Excel.dll; DestDir: {app}
    Source: Interop.Office.dll; DestDir: {app}
    Source: Interop.VBIDE.dll; DestDir: {app}
    Source: ZedGraph.dll; DestDir: {app}
    Source: pays_iso3.csv; DestDir: {app}
    Source: dotnetfx.exe; DestDir: {app}\utils
     
    [Icons]
    Name: {userdesktop}\AppXXX; Filename: {app}\AppXXX.exe; WorkingDir: {app}; Tasks: desktopicon
    Name: {group}\AppXXX; Filename: {app}\AppXXX.exe
     
    [Dirs]
    Name: {app}\utils
    Name: {app}\don; Flags: uninsalwaysuninstall
     
    [Languages]
    Name: en; MessagesFile: compiler:Default.isl
    Name: fr; MessagesFile: compiler:Languages\French.isl
     
    [CustomMessages]
    fr.PageDotNetTitre=Installation de Microsoft Framework .Net 1.1
    fr.PageDotNetInfo=Le Framework .Net 1.1 est un composant obligatoire pour le fonctionnement de AppXXX.
    fr.PageDotNetWait=Merci de patientez quelques minutes, le temps de l'installation du composant.
    fr.MsgDotNetL1=L'installation du composant Framework .Net a échouée.
    fr.MsgDotNetL2=L'installation de AppXXX est interrompue. Si le problème persiste, contacter votre support technique.
    en.PageDotNetTitre=Microsoft .Net Framework 1.1 Installation
    en.PageDotNetInfo=.Net Framework is mandatory for AppXXX to run
    en.PageDotNetWait=Please wait, it may takes a few minutes.
    en.MsgDotNetL1=Framework .Net installation failed.
    en.MsgDotNetL2=AppXXX installation is aborted, contact your helpdesk if the problem persist.
     
     
    [UninstallDelete]
    Name: {app}; Type: filesandordirs
     
    [INI]
    Filename: AppXXX.ini; Section: Default Value; Key: Dir; String: {app}\don
    Filename: AppXXX.ini; Section: Default Value; Key: seuilP; String: 0,2
    Filename: AppXXX.ini; Section: Default Value; Key: seuilV; String: 5000
     
    ;Replacer le crochet ouvrant devant 'Code]'
    Code[]
    var
        frameworkOK: boolean;
        exitSetup: boolean;
        DotNetPage: TInputQueryWizardPage;
        ProgressPage: TOutputProgressWizardPage;
     
    function InitializeSetup(): Boolean;
    begin
     
      frameworkOK := True;
      exitSetup := False;
      Result := True;
     
    end;
     
    procedure InitializeWizard;
     
    begin
      { Create the custom pages }
     
      DotNetPage := CreateInputQueryPage(wpWelcome, ExpandConstant('{cm:PageDotNetTitre}'), '',
      ExpandConstant('{cm:PageDotNetInfo}') + #13#13 + ExpandConstant('{cm:PageDotNetWait}') );
     
      ProgressPage := CreateOutputProgressPage(ExpandConstant('{cm:PageDotNetTitre}'), '');
    end;
     
    procedure frameworkInstalled();
    var
      ResultCode: Integer;
    begin
        // Check for required netfx 1.1 installation
        if not RegKeyExists(HKLM, 'Software\Microsoft\.NETFramework\policy\v1.1') then
        begin
          Exec(ExpandConstant('{tmp}\dotnetfx.exe'), '/q /c:"install /l /q"', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
          if ResultCode = 0 then
          begin
            //Execution réussie
            frameworkOK := True;
          end else begin
            //Execution echouée, ResultCode contient le code d'erreur de l'application
            frameworkOK := False;
          end;
        end;  
    end;
     
    function NextButtonClick(CurPageID: Integer): Boolean;
    begin
        case CurPageID of
        DotNetPage.ID:
        begin
            ProgressPage.SetText(ExpandConstant('{cm:PageDotNetWait}'), '');
          ProgressPage.SetProgress(1, 100);
          ProgressPage.Show;
     
          try
            ExtractTemporaryFile('dotnetfx.exe');
            ProgressPage.SetProgress(35, 100);
            frameworkInstalled();
     
            if not frameworkOK then
            begin
              exitSetup := True;
            end;
     
            ProgressPage.SetProgress(99, 100);
     
          finally
            ProgressPage.Hide;
          end;
        end;
        end;
        Result := True
    end;
     
    function ShouldSkipPage(PageID: Integer): Boolean;
    begin
      case PageID of
      wpSelectDir:
          Result := exitSetup;
        wpSelectProgramGroup:
          Result := exitSetup;
      wpSelectTasks:
          Result := exitSetup;
        wpReady:
          Result := exitSetup;
      wpFinished:
          Result := exitSetup;
      else
        Result := False;
      end;
    end;
     
    procedure CurStepChanged(CurStep: TSetupStep);
    begin
        if CurStep = ssInstall then
        begin
          if exitSetup = True then
          begin
            MsgBox(ExpandConstant('{cm:MsgDotNetL1}') + #13#13 +  ExpandConstant('{cm:MsgDotNetL2}'), mbInformation, MB_OK);
            Abort();
          end;
        end;
    end;

  13. #13
    Futur Membre du Club
    Entre - 20 a -30 mega dans ton setup
    (J'ai uniquement mis les lignes a rajouter et si tu veut le meme pour le framework V1.1 ben tu changes 2.0 en 1.1 et l'url du dotnefix.exe) Lol

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
     
    [_ISTool]
    EnableISX=true
     
    [Files]
    Source: C:\Program Files\ISTool\isxdl.dll; Flags: dontcopy
     
    Code[] //Idem que le message précedant
    var
      dotnetRedistPath: string;
      downloadNeeded: boolean;
      dotNetNeeded: boolean;
      memoDependenciesNeeded: string;
     
    procedure isxdl_AddFile(URL, Filename: PChar);
    external 'isxdl_AddFile@files:isxdl.dll stdcall';
    function isxdl_DownloadFiles(hWnd: Integer): Integer;
    external 'isxdl_DownloadFiles@files:isxdl.dll stdcall';
    function isxdl_SetOption(Option, Value: PChar): Integer;
    external 'isxdl_SetOption@files:isxdl.dll stdcall';
     
     
    const
      dotnetRedistURL = 'http://www.microsoft.com/downloads/info.aspx?na=90&p=&SrcDisplayLang=fr&SrcCategoryId=&SrcFamilyId=0856eacb-4362-4b0d-8edd-aab15c5e04f5&u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2f5%2f6%2f7%2f567758a3-759e-473e-bf8f-52154438565a%2fdotnetfx.exe';
      // local system for testing...
      // dotnetRedistURL = 'http://192.168.1.1/dotnetfx.exe';
     
    function InitializeSetup(): Boolean;
     
    begin
      Result := true;
      dotNetNeeded := false;
     
      // Check for required netfx installation
      if (not RegKeyExists(HKLM, 'Software\Microsoft\.NETFramework\policy\v2.0')) then begin
        dotNetNeeded := true;
        if (not IsAdminLoggedOn()) then begin
          MsgBox('MyApp needs the Microsoft .NET Framework to be installed by an Administrator', mbInformation, MB_OK);
          Result := false;
        end else begin
          memoDependenciesNeeded := memoDependenciesNeeded + '      .NET Framework' #13;
          dotnetRedistPath := ExpandConstant('{src}\dotnetfx.exe');
          if not FileExists(dotnetRedistPath) then begin
            dotnetRedistPath := ExpandConstant('{tmp}\dotnetfx.exe');
            if not FileExists(dotnetRedistPath) then begin
              isxdl_AddFile(dotnetRedistURL, dotnetRedistPath);
              downloadNeeded := true;
            end;
          end;
          SetIniString('install', 'dotnetRedist', dotnetRedistPath, ExpandConstant('{tmp}\dep.ini'));
        end;
      end;
     
    end;
     
    function NextButtonClick(CurPage: Integer): Boolean;
    var
      hWnd: Integer;
      ResultCode: Integer;
     
    begin
      Result := true;
     
      if CurPage = wpReady then begin
     
        hWnd := StrToInt(ExpandConstant('{wizardhwnd}'));
     
        // don't try to init isxdl if it's not needed because it will error on < ie 3
        if downloadNeeded then begin
     
          isxdl_SetOption('label', 'Downloading Microsoft .NET Framework');
          isxdl_SetOption('description', 'MyApp needs to install the Microsoft .NET Framework. Please wait while Setup is downloading extra files to your computer.');
          if isxdl_DownloadFiles(hWnd) = 0 then Result := false;
        end;
        if (Result = true) and (dotNetNeeded = true) then begin
          if Exec(ExpandConstant(dotnetRedistPath), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then begin
             // handle success if necessary; ResultCode contains the exit code
             if not (ResultCode = 0) then begin
               Result := false;
             end;
          end else begin
             // handle failure if necessary; ResultCode contains the error code
             Result := false;
          end;
        end;
      end;
    end;
     
    function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
    var
      s: string;
     
    begin
      if memoDependenciesNeeded <> '' then s := s + 'Dependencies to install:' + NewLine + memoDependenciesNeeded + NewLine;
      s := s + MemoDirInfo + NewLine + NewLine;
     
      Result := s
    end;

  14. #14
    Membre à l'essai
    Bonjour
    j'ai créé un programme d'installation pour un projet sous .net 2.0 grace à ton script (merci bien) Ce projet utilise un fichier appli.conf.
    Lorsque je créé mon installation, tout se passe bien.
    Par contre quand j'utilise le raccourcis pour lancer mon application il ne trouve pas ce fichier de configuration, alors que quand je lance directement l'application par c:\program files\appli\appli.exe il ne pose pas de problemes et trouve mon fichier de configuration

###raw>template_hook.ano_emploi###