精华内容
下载资源
问答
  • vue3.0中setup使用

    万次阅读 多人点赞 2020-10-26 11:07:39
    一、setup函数的特性以及作用  可以确定的是 Vue3.0 是兼容 Vue2.x 版本的 也就是说我们再日常工作中 可以在 Vue3 中使用 Vue2.x 的相关语法 但是当你真正开始使用 Vue3 写项目时 你会发现他比 Vue2.x 方便的多 ...

    一、setup函数的特性以及作用

      可以确定的是 Vue3.0 是兼容 Vue2.x 版本的 也就是说我们再日常工作中 可以在 Vue3 中使用 Vue2.x 的相关语法 但是当你真正开始使用 Vue3 写项目时 你会发现他比 Vue2.x 方便的多

      Vue3 的一大特性函数 ---- setup

      1、setup函数是处于 围绕 beforeCreate 和 created 生命周期钩子运行  也就说在 setup函数中是无法 使用 data 和 methods 中的数据和方法的

      2、setup函数是 Composition API(组合API)的入口

      3、在setup函数中定义的变量和方法最后都是需要 return 出去的 不然无法再模板中使用

    二、setup函数的注意点

      1、由于在执行 setup函数的时候,还没有执行 Created 生命周期方法,所以在 setup 函数中,无法使用 data 和 methods 的变量和方法

      2、由于我们不能在 setup函数中使用 data 和 methods,所以 Vue 为了避免我们错误的使用,直接将 setup函数中的this修改成了 undefined

      3、setup函数只能是同步的不能是异步的

    用法1:结合ref使用

    <template>
      <div id="app">
        {{name}}
        <p>{{age}}</p>
        <button @click="plusOne()">+</button>
      </div>
    </template>
    
    <script>
    import {ref} from 'vue'
    export default {
      name:'app',
      data(){
        return {
          name:'xiaosan'
        }
      },
      setup(){
        const name =ref('小四')
        const age=ref(18)
        function plusOne(){
          age.value++ //想改变值或获取值 必须.value
        }
        return { //必须返回 模板中才能使用
          name,age,plusOne
        }
      }
    }
    </script>

    用法2:代码分割

    Options API 和 Composition API 

    Options API 约定:

    我们需要在 props 里面设置接收参数

    我们需要在 data 里面设置变量

    我们需要在 computed 里面设置计算属性

    我们需要在 watch 里面设置监听属性

    我们需要在 methods 里面设置事件方法

    你会发现 Options APi 都约定了我们该在哪个位置做什么事,这反倒在一定程度上也强制我们进行了代码分割。

    现在用 Composition API,不再这么约定了,于是乎,代码组织非常灵活,我们的控制代码写在 setup 里面即可。

    setup函数提供了两个参数 props和context,重要的是在setup函数里没有了this,在 vue3.0 中,访问他们变成以下形式: this.xxx=》context.xxx

    我们没有了 this 上下文,没有了 Options API 的强制代码分离。Composition API 给了我们更加广阔的天地,那么我们更加需要慎重自约起来。

    对于复杂的逻辑代码,我们要更加重视起 Composition API 的初心,不要吝啬使用 Composition API 来分离代码,用来切割成各种模块导出。

    我们期望是这样的:

    importuseAfrom'./a';
    
    importuseBfrom'./b';
    
    importuseCfrom'./c';
    
    exportdefault{
    
    setup (props) {
    
    let{ a, methodsA } = useA();
    
    let{ b, methodsB } = useA();
    
    let{ c, methodsC } = useC();
    
    return{
    
    a,
    
    methodsA,
    
    b,
    
    methodsB,
    
    c,
    
    methodsC
    
    }
    
    }
    
    }

    就算 setup 内容代码量越来越大,但是始终围绕着大而不乱,代码结构清晰的路子前进。

     

    展开全文
  • Inno Setup代码,Inno Setup安装脚本,Inno setup demo, Inno Setup示例,Inno Setup例子 1.简单介绍 在制作Windows应用程序的过整,需要做一个建议安装包,用到Inno Setup这个工具,此工具开源,使用脚本即可...

    原创作品,未经允许请勿转载; http://blog.csdn.net/mynameislinduan


    Inno Setup代码,Inno Setup安装脚本,Inno setup demo, Inno Setup示例,Inno Setup例子

    1.简单介绍

    在制作Windows应用程序的过整,需要做一个建议安装包,用到Inno Setup这个工具,此工具开源,使用脚本即可编译,脚本可以使用pascal语言做。下面举例一个建议的安装脚本例子,基本符合一般用户的使用。

    2. Inno Setup 5.5 + 安装脚本

    • 此脚本在Inno setup 5.5以上版本试验成功,可正确编译运行。

    Inno Setup 脚本,里面包含了Pascal代码。

    
    ;定义程序名字,定义程序版本,定义可执行文件的名字,定义父母目录等等
    
    #define MyAppName "XX_XX"
    #define MyAppVersion "1.0.0" 
    
    #define MyAppExeName "XX_Ctrl.exe"
    #define ParentDir ".."
    
    [Setup]
    ; 注: AppId的值为单独标识该应用程序。
    ; 不要为其他安装程序使用相同的AppId值。
    ; (生成新的GUID,点击 工具|在IDE中生成GUID。)
    ;注意,下面的id要每个版本都不一样,以anysan36的版本为基础,改变最后的数字,例如现在的最后字符30表示30版本,add by done
    WindowVisible=yes
    AppId={{76754C92-F70C-46D4-A595-2C298E552B30}
    AppName={#MyAppName}
    AppVersion={#MyAppVersion}
    ;AppVerName={#MyAppName} {#MyAppVersion}
    ;AppPublisher={#MyAppPublisher}
    ;AppPublisherURL={#MyAppURL}
    ;AppSupportURL={#MyAppURL}
    ;AppUpdatesURL={#MyAppURL}
    DefaultDirName={pf}\{#MyAppName}
    DefaultGroupName={#MyAppName}
    AllowNoIcons=yes
    OutputDir={#ParentDir}\setup
    OutputBaseFilename={#MyAppName}_{#MyAppVersion}_setup
    SetupIconFile={#ParentDir}\MyExeDir\res\MyExeDir.ico
    Compression=lzma
    SolidCompression=yes
    WizardSmallImageFile="up.bmp"
    ;上边框图
    
    
    ;添加许可文件 
    LicenseFile=xkfile.txt
    
    ;右上角图片背景颜色  
    WizardSmallImageBackColor=clGray  
    ;右边图片背景颜色  
    WizardImageBackColor=clGray 
    ;左边图片是否拉伸 - yes;no  
    WizardImageStretch=no  
    
    
    ;小图标,左边小图标
    WizardImageFile="left.bmp"
    ;向导里面的图片,导向背景图片;
    [Languages]
    ;add by done,中英文双语安装
    ;Name: "chinesesimp"; MessagesFile: "compiler:Default.isl"
    Name: "Chinese"; MessagesFile: "compiler:Languages\Chinese.isl"
    Name: "english"; MessagesFile: "compiler:Default.isl"
    
    
    [Tasks]
    Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: checkablealone
    ; OnlyBelowVersion: 0,6.1
    Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: checkablealone
    
    [Files]
    Source: "{#ParentDir}\MyExeDir\Release\MyExeDir.exe"; DestDir: "{app}"; Flags: ignoreversion
    Source: "{#ParentDir}\UTL_10_B_USB.dl\Release\UTL_10_B_USB.dll"; DestDir: "{app}"; Flags: ignoreversion
    ;Source: "{#ParentDir}\UTL_10_B_USB.dl\Release\UTL_10_B_USB.lib"; DestDir: "{app}"; Flags: ignoreversion
    Source: "{#ParentDir}\UTL_10_B_USB_Senior\Release\UTL_10_B_USB_Senior.dll"; DestDir: "{app}"; Flags: ignoreversion
    ;Source: "{#ParentDir}\UTL_10_B_USB_Senior\Release\UTL_10_B_USB_Senior.lib"; DestDir: "{app}"; Flags: ignoreversion
    ;Source: "E:\DirPath\MyExeDir\Release\bulkusb.inf"; DestDir: "{app}"; Flags: ignoreversion
    ;Source: "E:\DirPath\MyExeDir\Release\BULKUSB.sys"; DestDir: "{app}"; Flags: ignoreversion
    ; 注意: 不要在任何共享系统文件上使用“Flags: ignoreversion”
    
    [Icons]
    Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
    Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
    Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
    Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon
    
    [Code]
    procedure InheritBoundsRect(ASource, ATarget: TControl);
    begin
      ATarget.Left := ASource.Left;
      ATarget.Top := ASource.Top;
      ATarget.Width := ASource.Width;
      ATarget.Height := ASource.Height;
    end;
    
    procedure InitializeWizard;
    var
      PageName, PageDescription: TLabel;
      BottomWelcomeLabel: TLabel;
      BackgroundImage: TBitmapImage;
    
    begin 
    //启动安装许可协议
      WizardForm.LICENSEACCEPTEDRADIO.Checked:=true;  
    
      //WizardForm.DiskSpaceLabel.Visible := False;//安装说明,安装路径选择说明
      //WizardForm.SelectDirBrowseLabel.Visible := False;
      //WizardForm.SelectDirLabel.Visible := False;
    
      BackgroundImage := TBitmapImage.Create(MainForm);
      BackgroundImage.Parent := MainForm;
      BackgroundImage.SetBounds(0, 0, MainForm.ClientWidth, MainForm.ClientHeight);
      BackgroundImage.Stretch := True;
      //ExtractTemporaryFile('D:\Image2.bmp');
      //解压背景图到临时文件夹,让安装程序使用
      BackgroundImage.Bitmap.LoadFromFile(ExpandConstant('.\back.bmp'));
    
    
      WizardForm.WizardBitmapImage.Align := alLeft;
      WizardForm.WizardSmallBitmapImage.Align := alRight;
      //WizardForm.WizardBitmapImage.Bitmap.LoadFromFile('D:\Image.bmp');
    
    
      //TopWelcomeLabel := TLabel.Create(WizardForm);
      //TopWelcomeLabel.Parent := WizardForm.WelcomeLabel1.Parent;
      //TopWelcomeLabel.Font := WizardForm.WelcomeLabel1.Font;
      //TopWelcomeLabel.Caption := WizardForm.WelcomeLabel1.Caption;
      //TopWelcomeLabel.WordWrap := WizardForm.WelcomeLabel1.WordWrap;
      //TopWelcomeLabel.Transparent := True;
      //InheritBoundsRect(WizardForm.WelcomeLabel1, TopWelcomeLabel);
      //WizardForm.WelcomeLabel1.Visible := False;
    
      //BottomWelcomeLabel := TLabel.Create(WizardForm);
      //BottomWelcomeLabel.Parent := WizardForm.WelcomeLabel2.Parent;
      //BottomWelcomeLabel.Font := WizardForm.WelcomeLabel2.Font;
      //BottomWelcomeLabel.Caption := WizardForm.WelcomeLabel2.Caption;
      //BottomWelcomeLabel.WordWrap := WizardForm.WelcomeLabel2.WordWrap;
      //InheritBoundsRect(WizardForm.WelcomeLabel2, BottomWelcomeLabel);
      //WizardForm.WelcomeLabel2.Visible := True;
    
      PageName := TLabel.Create(WizardForm.MainPanel); 
      PageName.Parent := WizardForm.MainPanel; 
      PageName.Top := WizardForm.PageNameLabel.Top; 
      PageName.Left := WizardForm.PageNameLabel.Left; 
      PageName.Width := WizardForm.PageNameLabel.Width; 
      PageName.Height := WizardForm.PageNameLabel.Height; 
      PageName.Font := WizardForm.PageNameLabel.Font; 
      PageName.Transparent := true; 
      //PageName.Caption :='测试,测试,测试,测试,测试,测试,测试,测试,测试,测试,测试,'; 
      PageName.Font.Color:=clRed; 
    
      PageDescription := TLabel.Create(WizardForm.MainPanel); 
      PageDescription.Parent := WizardForm.MainPanel; 
      PageDescription.Top := WizardForm.PageDescriptionLabel.Top; 
      PageDescription.Left := WizardForm.PageDescriptionLabel.Left; 
      PageDescription.Width := WizardForm.PageDescriptionLabel.Width; 
      PageDescription.Height := WizardForm.PageDescriptionLabel.Height; 
      PageDescription.Font := WizardForm.PageDescriptionLabel.Font; 
      PageDescription.Transparent := true; 
    
      PageDescription.Font.Color:=clPurple; 
    
    end;
    
    
    
    [Run]
    Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
    
    [UninstallDelete] 
    Type: filesandordirs; Name: "{app}"
    
    
    展开全文
  • 文章目录一、前言二、最终效果三、GitHub工程四、实现原理五、界面...iss脚本基础知识1、[Setup]2、[Languages]3、[Tasks]4、[Files]5、[Icons]6、[Run]7、[Registry]8、[Code]八、补充2:Pascal语法简单介绍1、数据类

    一、前言

    之前我写过一篇《Unity发布PC版,使用Inno Setup制作安装程序》,建议先看那一下那篇文章。今天,我要讲讲通过InnoSetup如何实现Setup安装程序的界面美化。

    二、最终效果

    如下,效果还可以吧,觉得不错的可以点个赞~
    在这里插入图片描述

    三、GitHub工程

    本文的Demo我已上传到GitHub,感兴趣的同学可以下载下来学习,觉得不错的话,记得给个星星~
    GitHub工程地址:https://github.com/linxinfa/Beautiful-InnoSetup-Demo
    在这里插入图片描述

    四、实现原理

    首先,你需要安装InnoSetup
    InnoSetup下载地址:https://jrsoftware.org/isinfo.php

    InnoSetup通过 Pascal Scripting: Event Functions这种事件机制,把流程节点的控制交给Pascal Script,使其可以控制上一步、下一步等等的操作。
    界面的美化,主要是调用两个美化插件动态库:botva2.dllInnoCallback.dll。用其来控制贴图的位置和样式,和给按钮绑定相应的事件等等的。

    点击下载InnoCallback.dll
    点击下载botva2.dll

    五、界面美化逻辑实现

    美化界面用到了botva2.dll。需要引入DllsImport.iss

    #include "DllsImport.iss"  
    

    1、资源目录

    界面资源放在res/tmp目录中,包括我们引用的两个dllbotva2.dllInnoCallback.dll
    在这里插入图片描述

    2、创建文本

    接口:

    function TLabel.Create(hParent:HWND):TLabel
    

    例:
    在这里插入图片描述

    var lblWelcome:TLabel;
    
    begin
    	lblWelcome := TLabel.Create(WizardForm);
    	with lblWelcome do
    		begin
    			 Parent := WizardForm;
    			 Caption := '欢迎安装XXX应用程序';
    			 Transparent := true;
    			 Font.Size:= 20
    			 Font.Name:='黑体'
    			 Font.Color:=$ffffff
    			 Left := DpiScale(190);
    			 Top := DpiScale(195);
    		end;
    end;	
    

    3、创建按钮

    接口

    function BtnCreate(hParent:HWND; 
    					Left,Top,Width,Height:integer; 
    					FileName:PAnsiChar; 
    					ShadowWidth:integer;
    					IsCheckBtn:boolean):HWND;
    

    例:
    在这里插入图片描述

    var 
    	btnOneKey:HWND;
    	BtnOneKeyFont:TFont;
    begin
    	// 创建按钮
    	btnOneKey:=BtnCreate(WizardForm.Handle,DpiScale(240),DpiScale(260),DpiScale(177), DpiScale(43), 
    				ExpandConstant('{tmp}\btnOneKeyInstall.png'), 1, False);
    				
    	//设置按钮文字
    	BtnSetText(btnOneKey, '一键安装');
    	//文字字体
    	BtnOneKeyFont:= TFont.Create;
    	with BtnOneKeyFont do begin 
    		Size := 20;
    		Name:='黑体';
    		Color:=$ffffff;
    	end;
    	//应用字体
    	BtnSetFont(btnOneKey, BtnOneKeyFont.Handle);
    	BtnSetFontColor(btnOneKey,$FAFAFA,$FFFFFF,$FFFFFF,$FFFFFF);
    	//设置按钮点击函数
    	BtnSetEvent(btnOneKey, BtnClickEventID, WrapBtnCallback(@btnOneKey_OnClick,1));	
    end;
    
    // 按钮点击回调
    procedure btnOneKey_OnClick(hBtn:HWND);
    begin
    	WizardForm.NextButton.OnClick(WizardForm);
    	WizardForm.NextButton.OnClick(WizardForm);
    end;
    

    4、创建背景图

    在这里插入图片描述

    var 
    	imgBg1:Longint;
    	winW:integer;
        winH:integer;
    begin
    	//窗口宽高
    	winW:=DpiScale(660)
    	winH:=DpiScale(480)
    	//创建背景图
    	imgBg1 := ImgLoad(WizardForm.Handle, ExpandConstant('{tmp}\bg.png'), (0), (0), winW, winH, True, True);
    	//设置背景图的隐藏
    	//ImgSetVisibility(imgBg1, false);
    end
    

    5、启动定时器

    接口

    function SetTimer(hWnd: longword; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
    

    例:
    通过定时器轮播背景图

    SetTimer(0, 0, 50, WrapTimerProc(@PageInstall_TimerProc, 4));
    
    procedure PageInstall_TimerProc(H: LongWord; Msg: LongWord; IdEvent: LongWord; Time: LongWord);
    begin
    	//轮播背景图逻辑
    end
    

    6、创建输入编辑框

    在这里插入图片描述

    begin
    	edtSelectDir1 := TEdit.Create(WizardForm);
    	with edtSelectDir1 do
    	begin
    		Parent:= WizardForm;
    		Text := WizardForm.DirEdit.Text;
    		Font.Size:= 10
    		Font.Color:=$555555
    		Left:= DpiScale(132);
    		Top := DpiScale(189);
    		Width:= DpiScale(311);
    		Height:= DpiScale(24);
    		BorderStyle:=bsNone;
    		TabStop := false;
    		OnChange:=@EdtSelectDir1_EditChanged;
    	end;
    end	
    

    7、设置UI对象显示与隐藏

    //隐藏按钮
    BtnSetVisibility(btn, false);
    //隐藏图片
    ImgSetVisibility(imgBig, false);
    //隐藏文本TLabel、隐藏输入框TEdit
    TconSetVisible(lbl, false);
    TconSetVisible(edt, false);
    

    8、监听安装进度

    用到了WindowsAPI

    function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; 
    	external 'SetWindowLongA@user32.dll stdcall';
    

    例:

    //设置监听
    PBOldProc:=SetWindowLong(WizardForm.ProgressGauge.Handle,-4, PBCallBack(@PBProc,4));
    
    //回调
    function PBProc(h:hWnd;Msg, wParam,lParam:Longint):Longint;
    var
    	pr, pos,total: Longint;
    	w : integer;
    begin
    	// CallWindowProc是将消息信息传送给指定的窗口过程的函数
    	Result:=CallWindowProc(PBOldProc, h, Msg, wParam,lParam);
    	if (Msg=$402) and (WizardForm.ProgressGauge.Position > WizardForm.ProgressGauge.Min) then
    	begin
    		pos:=WizardForm.ProgressGauge.Position-WizardForm.ProgressGauge.Min;
    		total:=WizardForm.ProgressGauge.Max-WizardForm.ProgressGauge.Min;
    		pr:=pos*100/total;
    		//更新进度条
    		PageInstall_SetProgress(pr);
    		Notify_DoNotifyProgress(pos, total);
    	end;
    end;
    

    六、Demo工程具体使用

    1、中文支持

    为了支持setup程序显示中文,需要配置中文语言文件:ChineseSimplified.isl
    点击查看ChineseSimplified.isl

    需将ChineseSimplified.isl放在InnoSetup安装目录中的Languages目录中。
    在这里插入图片描述

    2、放exe程序文件

    将要打包的程序文件放在pkgs目录中,如下放在pkgs/v1目录中,我用的是Unity发布了一个windows平台的包。
    在这里插入图片描述
    iss脚本中指明路径,并指明主程序文件,即.exe文件

    #define MyAppPkgDir ".\pkgs\v1"
    #define MyAppExeName "我的应用.exe"
    

    3、放界面图片素材

    界面素材放在res/tmp目录中
    在这里插入图片描述
    iss中需要执行解压拷贝

    // 将tmp的资源, 解压到安装运行时搞出来的临时目录
    ExtractTemporaryFile('bg.png');
    ExtractTemporaryFile('bg2.png');
    ExtractTemporaryFile('btclose.png');
    ExtractTemporaryFile('btmin.png');
    ExtractTemporaryFile('btn.png');
    ExtractTemporaryFile('btnOneKeyInstall.png');
    ExtractTemporaryFile('check.png');
    ExtractTemporaryFile('progress.png');
    ExtractTemporaryFile('progressBg.png');
    
    for i := 1 to InsBgAni_ImgCount do
    	ExtractTemporaryFile(Format('pic%d.png',[i]) );
    

    4、使用

    InnoSetup打开MakePCSetup.iss
    在这里插入图片描述
    执行脚本(按F9),即可生成setup程序
    在这里插入图片描述
    生成的setup文件在output目录中。
    在这里插入图片描述

    七、补充:iss脚本基础知识

    我们通过上一篇的教程(点击查看),可以生成一个iss脚本,我们需要看懂这个脚本,然后对他进行修改和新增代码,实现我们的界面美化功能。
    建议过程中可以翻翻Inno Setup帮助说明文档:https://jrsoftware.org/ishelp/index.php

    我们的iss脚本的结构是这样的:

    [Setup]
    [Languages]
    [Tasks]
    [Files]
    [Icons]
    [Run]
    [Registry]
    [Code]
    

    1、[Setup]

    这个段包含用于安装程序和卸载程序的全局设置。

    [Setup]
    AppId=123456789
    AppName="我的应用"
    AppVersion=1.5
    AppPublisher="公司名"
    DefaultDirName={autopf}\My Program
    DefaultGroupName=My Program
    

    2、[Languages]

    InnoSetup制作的安装程序,支持多种语言设置,默认是英文的,如果要设置中文,需要配置对应的中文语言。
    语言文件是.isl格式的,将其放在InnoSetup安装目录中的Languages目录中。
    在这里插入图片描述
    然后在脚本中指明语言文件。

    [Languages]
    Name: "chs"; MessagesFile: "compiler:Languages\ChineseSimplified.isl"
    

    哪里下载这个ChineseSimplified.isl呢?点我下载。

    3、[Tasks]

    它定义安装程序在执行安装期间所有由用户定制的任务。这些任务以选项框和单选项形式在附加任务向导页中出现。
    例:

    [Tasks]
    Name: "desktopicon"; Description: "创建桌面快捷方式"; GroupDescription: "添加快捷方式:"; Flags: checkedonce
    Name: "quicklaunchicon"; Description: "创建快速运行栏快捷方式"; GroupDescription: "添加快捷方式:"; Flags: checkedonce
    

    4、[Files]

    定义安装程序要安装在用户系统上的任何文件。
    例:

    [Files]
    Source: "CTL3DV2.DLL"; DestDir: "{sys}"; Flags: onlyifdoesntexist uninsneveruninstall
    Source: "MYPROG.EXE"; DestDir: "{app}"
    Source: "MYPROG.CHM"; DestDir: "{app}"
    Source: "README.TXT"; DestDir: "{app}"; Flags: isreadme
    

    5、[Icons]

    定义所有创建在开始菜单或其它位置 (比如桌面) 的快捷方式。
    例:

    [Icons]
    Name: "{group}\My Program"; Filename: "{app}\MYPROG.EXE"; WorkingDir: "{app}"
    Name: "{group}\Uninstall My Program"; Filename: "{uninstallexe}"
    

    6、[Run]

    用来指定程序完成安装后要执行的程序。
    例:

    [Run]
    Filename: "{app}\MYPROG.EXE"; Description: "Launch application"; Flags: postinstall nowait skipifsilent unchecked
    

    7、[Registry]

    定义安装程序在用户系统上创建、修改或删除的任何注册表项/值。
    例:

    [Registry]
    Root: HKLM; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty
    Root: HKLM; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey
    Root: HKLM; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}"
    

    其中Root的值简写对照表如下

    HKCU	(HKEY_CURRENT_USER)
    HKLM	(HKEY_LOCAL_MACHINE)
    HKCR	(HKEY_CLASSES_ROOT)
    HKU		(HKEY_USERS)
    HKCC	(HKEY_CURRENT_CONFIG)
    

    8、[Code]

    最重头的部分来了,[Code]部分使用的是Pascal语言编写的。我们的界面美化,就是在这里实现的。

    八、补充2:Pascal语法简单介绍

    1、数据类型

    1.1、整型数据
    类型 数值范围 占字节数 格式
    shortint -128 ~ 128 1 带符号 8 位
    inteter -32768 ~ 32767 2 带符号 16 位
    longint -2147483648 ~ 2147483647 4 带符号 32 位
    byte 0 ~ 255 1 带符号 8 位
    word 0 ~ 65535 2 带符号 16 位

    例:

    var
    	age:shortint;
    begin
    	age:=18;
    end;
    
    1.2、实型数据
    类型 占字节数 有效位数
    single 4 7~8
    real 6 11~12
    double 8 15~16
    extended 10 19~20
    comp 8 19~20

    例:

    var
    	a:single;
    begin
    	a:=1.3;
    end;
    
    1.3、字符类型

    例:

    var
    	a:String;
    	b:String;
    begin
    	a:="hello world";
    	b:=format('字符串拼接:%s', a);
    end;	
    
    1.4、布尔类型

    例:

    var
    	a:boolean;
    begin
    	a:=true;
    end;	
    
    1.5、CONST常量

    例:

    const
    	pi=3.14159;
    	zero=0;
    

    2、赋值语句

    变量名:=表达式;
    例:

    a:="hello world";
    

    3、if语句

    例:

    if x>y then
    	a:="big"
    else
    	a:="small";
    

    4、case语句

    例:

    var 
    	month,days:integer;  
    begin  
    	write('Input month:');
    	readln(month);  
    	case month of  
    		1,3,5,7,8,10,12:
    			days:=31;  
    		4,6,9,11:
    			days:=30;  
    		2:
    			days:=28;  
    		else 
    			days:=0;  
    	end;
    end; 
    

    5、for循环语句

    例:
    N的阶乘,N!=1*2*3*…*N,这里 N不大于 10

    var  
    	n,i:integer;
    	s:longint;
    begin  
    	write('Enter n=');
    	readln(n);
    	s:=1;  
    	for i:=2 to n do
    		s:=s*i;  
    	writeln(n, '的阶乘为:', s);
    end;
    

    6、while循环语句

    例:

    var
    	a,:integer;
    begin
    	a:=10;
    	while a>0 do
    		begin
    			a:=a-1;
    		end;
    end;	
    

    7、引用其他脚本

    #include "DllsImport.iss"  
    

    8、define常量与应用

    #define MyAppName "我的应用名"
    [Setup]
    AppName={#MyAppName}
    
    展开全文
  • python setup

    千次阅读 2016-06-28 00:05:40
    python setup 使用Python以来,基本不可逃避的就是setup.py文件,因为我们要安装各种各样的python软件或者其它第三方package,但是经常使用python setup.py install进行安装,却不甚明白该文件的工作原理。由于...

    python setup

    使用Python以来,基本不可逃避的就是setup.py文件,因为我们要安装各种各样的python软件或者其它第三方package,但是经常使用python setup.py install进行安装,却不甚明白该文件的工作原理。由于目前工作涉及了openstack,一个基于python的云操作系统,因此,理解一些python的基本知识是必须要的。故找时间了解了基本的python setup.py文件的制作。

    一、一个简单的setup.py文件:

    比如,我们经常使用的一个SSHpackageparamiko,其用于建立基于ssh协议的会话,下载地址为:https://github.com/paramiko/paramiko

    打开其中的setup.py文件,简单注释,如下所示:

    [python] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. import sys  
    2. from setuptools import setup            # setuptool工具  
    3.   
    4.   
    5. if sys.platform == 'darwin':  
    6.     import setup_helper  
    7.     setup_helper.install_custom_make_tarball()  
    8.   
    9.   
    10. # Version info -- read without importing  
    11. _locals = {}  
    12. with open('paramiko/_version.py') as fp:    # 获取paramiko文件的version号,注册到paramiko中  
    13.     exec(fp.read(), None, _locals)  
    14. version = _locals['__version__']             # 写入到dict中  
    15.   
    16. # 介绍:https://docs.python.org/3/distutils/setupscript.html  
    17. setup(  
    18.     # meta-data数据,此外还有maintainer,maintainer_email,  
    19.     # 其中name、version、url是必须的  
    20.     name = "paramiko",                          # package name  
    21.     version = version,                          # package version  
    22.     description = "SSH2 protocol library",      # 简要描述  
    23.     long_description = longdesc,                # 一般用于读取readme.txt文件的内容。。。在package发布到pypi上的时候,这项是必须的,作为package介绍  
    24.     author = "Jeff Forcier",                    # pacakge author  
    25.     author_email = "jeff@bitprophet.org",       # author's email  
    26.     url = "https://github.com/paramiko/paramiko/",  # 下载地址  
    27.     packages = [ 'paramiko' ],                  # 安装包,这里会去检索paramiko/__init__.py文件。。。也就是告诉distutils时需要处理哪些包  
    28.     license = 'LGPL',                           # license授权  
    29.     platforms = 'Posix; MacOS X; Windows',      # 平台  
    30.     # classifiers分类  
    31.     classifiers = [  
    32.         'Development Status :: 5 - Production/Stable',  
    33.         'Intended Audience :: Developers',  
    34.         'License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)',  
    35.         'Operating System :: OS Independent',  
    36.         'Topic :: Internet',  
    37.         'Topic :: Security :: Cryptography',  
    38.         'Programming Language :: Python',  
    39.         'Programming Language :: Python :: 2',  
    40.         'Programming Language :: Python :: 2.6',  
    41.         'Programming Language :: Python :: 2.7',  
    42.         'Programming Language :: Python :: 3',  
    43.         'Programming Language :: Python :: 3.2',  
    44.         'Programming Language :: Python :: 3.3',  
    45.         'Programming Language :: Python :: 3.4',  
    46.         'Programming Language :: Python :: 3.5',  
    47.     ],  
    48.     # 依赖包,有几种符号  
    49.     install_requires=[  
    50.         'cryptography>=1.1',  
    51.         'pyasn1>=0.1.7',  
    52.     ],  
    53. )  

    Setup脚本是利用distutils进行编译、发包、安装模块的主要脚本。Setup主要的目的是将我们的发布包按照distutils描述的方式组织,方便开发安装。

    其实,在setup.py文件中,主要包含以下内容:

    S1、列出所有的packages,使用关键字packagespackage_dir两个;

    S2、列出所有的依赖模块,使用py_modules;

    S3、列出扩展模块,包括扩展名和包、源代码文件、预处理选项如includelibrary选项,以及其它的一些选项;

    S4、文件发布版与依赖包的关系,使用==>=!=<

    S5、直接安装scripts文件,使用scripts关键字;

    S6、安装package data,使用package_data

    S7、安装一些其他文件,使用data_files

    S8、额外的meta-data数据,包括versionnameauthorclassifiers等,网址上介绍了meta-data数据的东西,这个是setup.py文件中必须的参数:

     

    上面的(1)表示该字段是setup文件中必须的。这个就是我们当前的setup文件的编排格式。

    二、setup文件使用:

    理解了setup.py文件里面的字段含义,那么我们就可以学习setup文件的使用了,其主要有以下几种方式:
    python setup.py build #编译
    python setup.py install    #安装,最基本的安装方式
    python setup.py sdist     #制作分发包,制作一个源码包,格式为zip/tar.gz

    python setup.py bdist_egg     #制作一个二进制分发包
    python setup.py bdist_wininst #制作windows下的分发包exe程序
    python setup.py bdist_rpm #制作linux下的rpm包,需要rpm程序支持

    下面我们开始编写一个setup.py文件,内容如下:

    [python] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. from distutils.core import setup  
    2. setup(  
    3.     name = 'myfirsttest',  
    4.     version = '1.0',  
    5.     py_modules = ['myfirsttest']  
    6. )  

    执行python setup.py sdist后,会生成一个文件包,里面会有对应的源码包:



    到时候,客户端拿到这个压缩包后,解压,并执行python setup.py install就可以进行安装。

    三、setup.cfg文件:

    Stackflow上的解释:

    http://stackoverflow.com/questions/27077355/how-to-use-setup-cfg-instead-of-setup-py-with-python-2-7

    The problem is that the setup.cfg file does not do what you want. It does not provide parameters to the setup function. It is used to supply parameters to the commands that setup.py makes available. You can list the supported commands with setup.py --help-commands. You should see something like:

    Setup.cfg并不是setup函数中的参数,而是setup.py文件中的一些参数,可以使用setup.py --help-commands命令查看:

     

    这只是python setup.py的参数,但是这并不是直接需要写入setup.cfg文件中的。具体的,还要再继续查看,比如,sdist命令可使用的参数如下:

     

    可以看到,当我们需要制作源码的时候,可以使用verbosequiet等参数,这就是我们需要写入setup.cfg文件中的。

    setup.cfg的文件中是按照section去处理的,比如:

    比如,当我们setup.cfg中如下时:

     

    当我们执行python setup.py build安装的时候,实际执行的是如下命令:

     

    参考:https://docs.python.org/2/install/index.html#distutils-configuration-files

    四、distutils介绍:

    setuptool通过封装distutils,简化了package的安装过程。Distutils,全称为:Python

    Distribution Utilities,从python 1.6以来,distutils已经成为python标准库的一部分,极大的简化了用户安装新模块、第三方包和标准工具,并且创建这些distribution的方式也极大的简化了。Distutils既为支持RPMlinux提供了创建RPM的方式,也提供了制作windows exe的方式。Distutils通过将setup.pysetup.cfgsource code、第三方编译包集成在一起,做成可用的package

    Distutils统一了linuxwindowspython的安装方式,并不区分是rpm包还是tarball方式,只是执行python setup.py install即可进行安装。并且,可以令不同的开发者向同一块package进行工作。

    一般来讲,我们会依次执行buildinstall,其中build会将所有的源文件进行编译,并放到同对应目录下,生成build/lib文件,源文件不限于python,也可以是C/C++。如果考虑到build的速度,可以使用--buuld-base指定build的目录。编译完成后,使用install安装,安装的过程,是将该目录下的文件拷贝到对应的代码目录下。

    我们默认的安装目录是:

     

    如果是默认的话,一般是标准的python安装目录,linux下一般prefixexec-prefix/usr,而windows下是C:\Program Files\Python,可以采用如下方式查询安装目录:

     

    我们可以使用如下参数去指定install的方式:

    S1--userlinux下的用户选择,确保该用户对安装目录有权限;

    S2--home:指定安装目录:

     

    可以与--install-purelib--install-scripts--install-platlib--install-data组合使用,确认各个子条目的安装目录。

    S3--prefix:指定安装目录的前缀,如果目录不存在,则会创建一个

     

    S4--exe-prefix:制定扩展模块的安装目录前缀

    S5--install-scripts:指定scripts的安装目录,可以与--home--prefix组合使用

    --install-base

    S6--install-platbase

    我们的配置参数有很多,但是setuptools为我们提供了一个合理的方式,就是专有的配置文件

    Windows下的配置文件为:

     

    Linux下的配置文件为:

     

    这也就是我们经常看到的setup.cfg文件的作用,里面的配置可以如下:

     

    当我们安装完成后,python会按照目录去搜素安装的包,其搜素的路径在sys模块中:

     

    Sys.path中为空的表示当前目录,当我们需要搜索某一目录的时候,可以将该目录加入到sys.path中。也可以通过PATHHOME设置更改目录。

    distutils官网:https://docs.python.org/2/distutils/

    五、setuppip安装的方式区别:

     

    Setup

    Pip

    相同

    1.包安装

    1.包安装

    不同

    1.手动下载;

    2.没有统一的管理;

    3.Easy_install会调用setuptool进行安装

    1.自动下载;

    2.自动管理包,更新卸载更方便,执行pip uninstall即可;

    3.提供了对virtualenv的管理

     

    展开全文
  • vue3.0 setup

    千次阅读 2020-07-25 16:02:06
    (1)setup函数是一个新的组件选项。作为在组件内使用 Composition API 的入口点 (2)之前的data、声明周期、自定义函数都放置在内 (3)创建组件实例,然后初始化 props ,紧接着就调用setup 函数。从生命周期钩子的视角来...
  • 电脑长时间断电再开机出现: Please enter setup to recover BIOS setting Press F1 to run SETUP 按F1 进入BIOS ,再按F10保存退出才能启动。 分析原因:主板电池没电,需更换电池 ...
  • setup命令

    2015-04-21 21:21:11
    使用setup命令去进行系统的服务、防火墙、SELinux、网络设备编辑等操作时, 提示了系统找不到setup命令: [code="java"][root@CentOS ~]# setup -bash: setup: command not found[/code] 这时候...
  • python setup.py和setup.cfg

    千次阅读 2018-12-20 14:13:22
    源地址:http://lingxiankong.github.io/blog/2013/12/23/python-setup/ 转载来源:http://blog.csdn.net/xluren/article/details/41114779   https://blog.csdn.net/u012433488/article/details/51221185   ...
  • flutter 安装时候pod setup 不生效 把pod 版本降低到 1.7.5 pod setup 下载慢 切换镜像源 清华镜像源,第二个解决办法 https://mirror.tuna.tsinghua.edu.cn/help/CocoaPods/
  • vs_setup.MSI

    千次下载 热门讨论 2011-03-02 13:22:20
    运行Microsoft Visual C++ 2005 Express Edition - ENU中setup.exe后提示could not be opened 将此文件命名为“ vs_setup.MS_ ”(注意最后那个不是I,是下划线)放在setup.exe同文件夹中即可 此文件是在线安装vc++...
  • Inno Setup 介绍

    千次阅读 2017-03-04 12:08:13
    Inno Setup 详解中文资料    其一:使用教程   一、Inno Setup 是什么?     InnoSetup 是一个免费的 Windows 安装程序制作软件。第一次发表是在 1997 年,Inno Setup 今天在功能设置和稳定性上的竞争...
  • distribute_setup.zip

    热门讨论 2016-03-08 12:42:03
    安装opencc-python出错时:解压缩distribute_setup.zip后,把distribute_setup.py放到C:\Python\Lib
  • 如果同时设置了suite setup和test setup,会先执行suite setup,再执行test setup 在运行每一个测试用例前,都会先执行一次test setup 如果想在setup里面执行多个关键字,就需要用到Run Keywords关键字,用法为...
  • Inno setup打包教程

    万次阅读 2017-12-14 12:40:47
    Inno setup打包教程如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:129518033下载地址 1.官方版本:http://www.jrsoftware.org/isdl.php 2.汉化版本:...
  • 1.在安装某个库或包时,发现可以python setup.py install 和python setup.py develop两种方式来安装,这两种方法有什么不同?一直困扰着我,下面我们就来讨论下这个简单的问题 2.python setup.py install:主要是...
  • Inno setup 打包教程

    万次阅读 2017-10-07 08:55:45
    inno setup 是较常用且简单的软件打包工具。 1、安装并打开 inno setup 软件 ① 运行环境 系统:Windows 7 软件:inno setup 5.5.5 ② 安装 inno setup 5.5.5 完成后,点击 “开始” → “所有...
  • 电脑开机后出现Aptio Setup Utility是由于散热不zd良,电压不稳定或者硬盘有问题找不到可以启动的硬盘导致的。 1、在BIOS界面,按 F9键恢复,回车 2、按F10保存,回车,电脑会自动重新启动,恢复BIOS默认值完成 3...
  • Inno Setup打包教程

    千次阅读 2019-04-15 16:34:00
    Inno Setup 是一个免费的 Windows 安装程序制作软件。第一次发表是在 1997 年,现在已经更新到Inno Setup 5了。Inno Setup是一个十分简单实用的打包小工具,可以按照我们自己的意愿设置功能,稳定性也十分好。 官方...
  • setup函数

    千次阅读 2013-11-28 20:52:49
    private String name; public void setup ( Context context ) { this.name = context.getConfiguration().get("name"); 这样在map方法里就可以直接用this.name了 }
  • centos7使用setup

    千次阅读 2018-11-22 21:47:58
    centos7使用setup CentOS系统找不到setup命令工具的解决方法
  • python的构建工具setup.py

    万次阅读 多人点赞 2019-06-04 13:42:18
    一、构建工具setup.py的应用场景 在安装python的相关模块和库时,我们一般使用“pip install 模块名”或者“python setup.py install”,前者是在线安装,会安装该包的相关依赖包;后者是下载源码包然后在本地安装...
  • CentOS中安装setup工具

    千次阅读 2017-11-08 15:57:50
    CentOS中安装setup工具 在CentOS中可以使用setup配置工具很方便地配置防火墙、网络、系统服务等配置项。如果采用最小化安装CentOS的话,默认没有安装该工具。下面我们手动安装下setup工具。   1、安装...
  • ROS笔记(28) Setup Assistant

    万次阅读 2019-08-24 09:34:31
    Setup Assistant、加载机器人URDF模型、配置自碰撞矩阵、 配置虚拟关节、创建规划组、定义机器人位姿、配置终端夹爪、配置无用关节、ROS控制、仿真、3D感知、设置作者信息、生成配置文件
  • 1、安装setuptool yum -y install setuptool...3、setup中配套的防火墙设置也得装上去,不然会出现很多selinux上面的问题 yum -y install system-config-securitylevel-tui 4、安装setup中配套的网络设置 yu...
  • openstack keystone中setup.py和setup.cfg解析
  • 打开vs code后一直显示Flutter Setup: Running pub upgrade.. Flutter Setup:Building flutter tool... flutter doctor也失败,提示 :Building flutter tool... Running pub upgrade... 系统找不到指定的路径 太...
  • matlab2012a+vs2012 win64bitmatlab与vs混合编程中,在matlab命令窗口输入mex -setup与mbuild -setup提示Error using mbuild (line 189)Unable to complete successfully.在网上看了很多解决方案,比如 装sdk7.1,...
  • Inno Setup打包

    千次阅读 2015-11-04 15:22:02
    Inno Setup打包CreateProcess 740出错 0条评论 win7及以上系统,对部分软件要使用管理员权限运行.Inno Setup打包的软件.在安装完成后,提示CreateProcess 740错误, 解决办法: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 273,855
精华内容 109,542
关键字:

setup