文档库 最新最全的文档下载
当前位置:文档库 › C下执行命令行的方法

C下执行命令行的方法

C下执行命令行的方法
C下执行命令行的方法

一、system()--执行shell命令

1、包含头文件:

#include

2、定义

int system(const char * string);

3、参数

String:合法的可执行DOS(SHELL)命令

4、返回值

1)如果system()在调用/bin/sh 时失败则返回127, 其他失败原因返回-1。

2)若参数string 为空指针(NULL), 则返回非零值。

3)如果system()调用成功则最后会返回执行shell 命令后的返回值, 但是此返回值也有可能为system()调用/bin/sh 失败所返回的127, 因此最好能再检查errno 来确认执行成功。

5、说明

system()会调用fork()产生子进程, 由子进程来调用/bin/sh-c string 来执行参数string 字符串所代表的命令, 此命令执行完后随即返回原调用的进程. 在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT 和SIGQUIT 信号则会被忽略。

6、用例

system(“ipconfig/all”);

7、重定向标准输出流

FILE *stream;

stream = freopen(“data.txt”,”wb”,stdout);

运行结果可以重定向到data.txt

8、隐藏控制台窗口

#pragma comment( linker, “/subsystem:\”windows\”/entry:\”mainCRTStartup\”” )

仍有调用的DOS窗口一闪,且重定向失效。

二、WinExec()—运行可执行程序

1、包含头文件

#include

2、定义

UINT Win Exec(LPCSTR lpCmdLine, UINT uCmdShow);

3、参数

lpCmdLine:指向一个空结束的字符串,串中包含将要执行的应用程序的命令行(文件名加上可选参数)。

uCmdShow:定义Windows应用程序的窗口如何显示,并为CreateProcess函数提供STARTUPINFO参数的wShowWindow成员的值。

//uCmdShow 参数可选值:

SW_HIDE = 0; {隐藏, 并且任务栏也没有最小化图标}

SW_SHOWNORMAL = 1; {用最近的大小和位置显示, 激活}

SW_NORMAL = 1; {同SW_SHOWNORMAL}

SW_SHOWMINIMIZED = 2; {最小化, 激活}

SW_SHOWMAXIMIZED = 3; {最大化, 激活}

SW_MAXIMIZE = 3; {同SW_SHOWMAXIMIZED}

SW_SHOWNOACTIVATE = 4; {用最近的大小和位置显示, 不激活}

SW_SHOW = 5; {同SW_SHOWNORMAL}

SW_MINIMIZE = 6; {最小化, 不激活}

SW_SHOWMINNOACTIVE = 7; {同SW_MINIMIZE}

SW_SHOWNA = 8; {同SW_SHOWNOACTIVATE}

SW_RESTORE = 9; {同SW_SHOWNORMAL}

SW_SHOWDEFAULT = 10; {同SW_SHOWNORMAL}

SW_MAX = 10; {同SW_SHOWNORMAL}

4、返回值

若函数调用成功,则返回值大于31。若函数调用失败,则返回值为下列之一:

1)0:系统内存或资源已耗尽。

2)ERROR_BAD_FORMAT:EXE文件无效(非Win32.EXE或.EXE 影像错误)。

3)ERROR_FILE_NOT_FOUND:指定的文件未找到。

4)ERROR_PATH_NOT_FOUND:指定的路径未找到。

5)大于31 {调用成功}

6)等于0 {内存不足}

7)ERROR_FILE_NOT_FOUND = 2; {文件名错误}

8)ERROR_PATH_NOT_FOUND = 3; {路径名错误}

9)ERROR_BAD_FORMAT = 11; {EXE 文件无效}

5、用例

WinExec("notepad.exe",SW_SHOW);//运行计事本

WinExec(“cmd /c ipconfig”,SW_SHOW); //运行命令行

6、重定向标准输出流

不同窗口,无法重定向

7、隐藏控制台窗口

#pragma

SW_HIDE

窗口都隐藏。

三、ShellExecute()—运行文件

1、包含头文件

#include

2、定义

ShellExecute(

hWnd: HWND; {指定父窗口句柄}

Operation: PChar; {指定动作, 譬如: open、runas、print、edit、explore、find[2] }

FileName: Pchar; {指定要打开的文件或程序}

Parameters: Pchar; {给要打开的程序指定参数; 如果打开的是文件这里应该是null}

Directory: Pchar; {缺省目录}

ShowCmd: Integer {打开选项}

): HINST;

3、参数

见上

//ShowCmd 参数可选值:

SW_HIDE = 0; {隐藏}

SW_SHOWNORMAL = 1; {用最近的大小和位置显示, 激活}

SW_NORMAL = 1; {同SW_SHOWNORMAL}

SW_SHOWMINIMIZED = 2; {最小化, 激活}

SW_SHOWMAXIMIZED = 3; {最大化, 激活}

SW_MAXIMIZE = 3; {同SW_SHOWMAXIMIZED}

SW_SHOWNOACTIVATE = 4; {用最近的大小和位置显示, 不激活} SW_SHOW = 5; {同SW_SHOWNORMAL}

SW_MINIMIZE = 6; {最小化, 不激活}

SW_SHOWMINNOACTIVE = 7; {同SW_MINIMIZE}

SW_SHOWNA = 8; {同SW_SHOWNOACTIVATE}

SW_RESTORE = 9; {同SW_SHOWNORMAL}

SW_SHOWDEFAULT = 10; {同SW_SHOWNORMAL}

SW_MAX = 10; {同SW_SHOWNORMAL}

4、返回值

执行成功会返回应用程序句柄

返回的HINSTANCE可以将它转换为一个整数(%d),并比较它的值大于还是小于32或比较它的错误代码

返回值大于32表示执行成功

返回值小于32表示执行错误

返回值可能的错误有: = 0 {内存不足}

ERROR_FILE_NOT_FOUND = 2; {文件名错误}

ERROR_PATH_NOT_FOUND = 3; {路径名错误}

ERROR_BAD_FORMAT = 11; {EXE 文件无效}

SE_ERR_SHARE = 26; {发生共享错误}

SE_ERR_ASSOCINCOMPLETE = 27; {文件名不完全或无效}

SE_ERR_DDETIMEOUT = 28; {超时}

SE_ERR_DDEFAIL = 29; {DDE 事务失败}

SE_ERR_DDEBUSY = 30; {正在处理其他DDE 事务而不能完成该DDE 事务}

SE_ERR_NOASSOC = 31; {没有相关联的应用程序}

5、说明

ShellExecute的功能是运行一个外部程序(或者是打开一个已注册的文件、打开一个目录、打印一个文件等等),并对外部程序有一定的控制。可打开可执行文件,也可打开已关联打开程序的文件。

6、用例

//调用计算器

ShellExecute(NULL,”open”,”calc.exe”,NULL,NULL,SW_SHOWNORMA L);

//调用记事本

ShellExecute(NULL,”open”,”NOTEPAD.EXE”,NULL,NULL,SW_SHOWN ORMAL);

//执行命令行

ShellExecute(NULL,”open”,”cmd.exe”,”/c help”,NULL,SW_SHOW);

7、标准输出流重定向

无效,不是同一个窗口。

8、隐藏控制台

#pragma

SW_HIDE

两个窗口均能隐藏,但重定向无效。

四、CreateProcess()—

1、包含头文件

#include

2、定义

BOOL CreateProcess

(

LPCTSTR lpApplicationName,

LPTSTR lpCommandLine,

LPSECURITY_ATTRIBUTES lpProcessAttributes。

LPSECURITY_ATTRIBUTES lpThreadAttributes,

BOOL bInheritHandles,

DWORD dwCreationFlags,

LPVOID lpEnvironment,

LPCTSTR lpCurrentDirectory,

LPSTARTUPINFO lpStartupInfo,

LPPROCESS_INFORMATIONlpProcessInformation

);

3、参数

1)lpApplicationName

指向一个NULL结尾的、用来指定可执行模块的字符串。

这个字符串可以是可执行模块的绝对路径,也可以是相对路径,在后一种情况下,函数使用当前驱动器和目录建立可执行模块的路径。

这个参数可以被设为NULL,在这种情况下,可执行模块的名字必须处于lpCommandLine 参数最前面并由空格符与后面的字符分开。

2)lpCommandLine

指向一个以NULL结尾的字符串,该字符串指定要执行的命令行。

这个参数可以为空,那么函数将使用lpApplicationName参数指定的字符串当做要运行的程序的命令行。

如果lpApplicationName和lpCommandLine参数都不为空,那么lpApplicationName参数指定将要被运行的模块,lpCommandLine参数指定将被运行的模块的命令行。新运行的进程可以使用GetCommandLine函数获得整个命令行。C语言程序可以使用argc和argv参数。

3)lpProcessAttributes

指向一个SECURITY_ATTRIBUTES结构体,这个结构体决定返回的句柄是否可以被子进程继承。如果lpProcessAttributes参数为空(NULL),那么句柄不能被继承。

在Windows NT中:SECURITY_ATTRIBUTES结构的lpSecurityDescriptor成员指定了新进程的安全描述符,如果参数为空,新进程使用默认的安全描述符。

4)lpThreadAttributes

同lpProcessAttribute,不过这个参数决定的是线程是否被继承.通常置为NULL.

5)bInheritHandles

指示新进程是否从调用进程处继承了句柄。

如果参数的值为真,调用进程中的每一个可继承的打开句柄都将被子进程继承。被继承的句柄与原进程拥有完全相同的值和访问权限。

6)dwCreationFlags

指定附加的、用来控制优先类和进程的创建的标志。以下的创建标志可以以除下面列出的方式外的任何方式组合后指定。

⑴值:CREATE_DEFAULT_ERROR_MODE

含义:新的进程不继承调用进程的错误模式。CreateProcess函数赋予新进程当前的默认错误模式作为替代。应用程序可以调用SetErrorMode函数设置当前的默认错误模式。

这个标志对于那些运行在没有硬件错误环境下的多线程外壳程序是十分有用的。

对于CreateProcess函数,默认的行为是为新进程继承调用者的错误模式。设置这个标志以改变默认的处理方式。

⑵值:CREATE_NEW_CONSOLE

含义:新的进程将使用一个新的控制台,而不是继承父进程的控制台。这个标志不能与DETACHED_PROCESS标志一起使用。

⑶值:CREATE_NEW_PROCESS_GROUP

含义:新进程将使一个进程树的根进程。进程树中的全部进程都是根进程的子进程。新进程树的用户标识符与这个进程的标识符是相同的,由lpProcessInformation参数返回。进程树经常使用GenerateConsoleCtrlEvent函数允许发送CTRL+C或CTRL+BREAK信号到一组控制台进程。

⑷值:CREATE_SEPARATE_WOW_VDM

如果被设置,新进程将会在一个私有的虚拟DOS机(VDM)中运行。另外,默认情况下所有的16位Windows应用程序都会在同一个共享的VDM中以线程的方式运行。单独运行一个16位程序的优点是一个应用程序的崩溃只会结束这一个VDM的运行;其他那些在不同VDM中运行的程序会继续正常的运行。同样的,在不同VDM中运行的16位Windows应用程序拥有不同的输入队列,这意味着如果一个程序暂时失去响应,在独立的VDM中的应用程序能够继续获得输入。

⑸值:CREATE_SHARED_WOW_VDM

如果WIN.INI中的Windows段的DefaultSeparateVDM选项被设置为真,这个标识使得CreateProcess函数越过这个选项并在共享的虚拟DOS机中运行新进程。

⑹值:CREATE_SUSPENDED

含义:新进程的主线程会以暂停的状态被创建,直到调用ResumeThread函数被调用时才运行。

⑺值:CREATE_UNICODE_ENVIRONMENT

含义:如果被设置,由lpEnvironment参数指定的环境块使用Unicode字符,如果为空,环境块使用ANSI字符。

⑻值:DEBUG_PROCESS

含义:如果这个标志被设置,调用进程将被当做一个调试程序,并且新进程会被当做被调试的进程。系统把被调试程序发生的所有调试事件通知给调试器。

如果你使用这个标志创建进程,只有调用进程(调用CreateProcess函数的进程)可以调用WaitForDebugEvent函数。

⑼值:DEBUG_ONLY_THIS_PROCESS

含义:如果此标志没有被设置且调用进程正在被调试,新进程将成为调试调用进程的调试器的另一个调试对象。如果调用进程没有被调试,有关调试的行为就不会产生。

⑽值:DETACHED_PROCESS

含义:对于控制台进程,新进程没有访问父进程控制台的权限。新进程可以通过AllocConsole函数自己创建一个新的控制台。这个标志不可以与CREATE_NEW_CONSOLE标志一起使用。

⑾值:CREATE_NO_WINDOW

含义:系统不为新进程创建CUI窗口,使用该标志可以创建不含窗口的CUI程序。

dwCreationFlags还用来控制新进程的优先类,优先类用来决定此进程的线程调度的优先级。如果下面的优先级类标志都没有被指定,那么默认的优先类是NORMAL_PRIORITY_CLASS,除非被创建的进程是IDLE_PRIORITY_CLASS。在这种情况下子进程的默认优先类是IDLE_PRIORITY_CLASS。

可以选择下面的标志中的一个:

优先级:HIGH_PRIORITY_CLASS

含义:指示这个进程将执行时间临界的任务,所以它必须被立即运行以保证正确。这个优先级的程序优先于正常优先级或空闲优先级的程序。一个例子是Windows任务列表,为了保证当用户调用时可以立刻响应,放弃了对系统负荷的考虑。确保在使用高优先级时应该足够谨慎,因为一个高优先级的CPU关联应用程序可以占用几乎全部的CPU可用时间。

优先级:IDLE_PRIORITY_CLASS

含义:指示这个进程的线程只有在系统空闲时才会运行并且可以被任何高优先级的任务打断。例如屏幕保护程序。空闲优先级会被子进程继承。

优先级:NORMAL_PRIORITY_CLASS

含义:指示这个进程没有特殊的任务调度要求。

优先级:REALTIME_PRIORITY_CLASS

含义:指示这个进程拥有可用的最高优先级。一个拥有实时优先级的进程的线程可以打断所有其他进程线程的执行,包括正在执行重要任务的系统进程。例如,一个执行时间稍长一点的实时进程可能导致磁盘缓存不足或鼠标反映迟钝。

7)lpEnvironment

指向一个新进程的环境块。如果此参数为空,新进程使用调用进程的环境。

一个环境块存在于一个由以NULL结尾的字符串组成的块中,这个块也是以NULL结尾的。每个字符串都是name=value的形式。

因为相等标志被当做分隔符,所以它不能被环境变量当做变量名。

与其使用应用程序提供的环境块,不如直接把这个参数设为空,系统驱动器上的当前目录信息不会被自动传递给新创建的进程。对于这个情况的探讨和如何处理,请参见注释一节。

环境块可以包含Unicode或ANSI字符。如果lpEnvironment指向的环境块包含Unicode字符,那么dwCreationFlags字段的CREATE_UNICODE_ENⅥRONMENT标志将被设置。如果块包含ANSI 字符,该标志将被清空。

请注意一个ANSI环境块是由两个零字节结束的:一个是字符串的结尾,另一个用来结束这个快。一个Unicode环境块是由四个零字节结束的:两个代表字符串结束,另两个用来结束块。

8)lpCurrentDirectory

指向一个以NULL结尾的字符串,这个字符串用来指定子进程的工作路径。这个字符串必须是一个包含驱动器名的绝对路径。如果这个参数为空,新进程将使用与调用进程相同的驱动器和目录。这个选项是一个需要启动应用程序并指定它们的驱动器和工作目录的外壳程序的主要条件。

9)lpStartupInfo

指向一个用于决定新进程的主窗体如何显示的STARTUPINFO结构体。

10)lpProcessInformation

指向一个用来接收新进程的识别信息的PROCESS_INFORMATION 结构体。

4、返回值

如果函数执行成功,返回非零值。

如果函数执行失败,返回零,可以使用GetLastError函数获得错误的附加信息。

5、说明

CreateProcess函数用来运行一个新程序。WinExec和LoadModule 函数依旧可用,但是它们同样通过调用CreateProcess函数实现。

另外CreateProcess函数除了创建一个进程,还创建一个线程对象。这个线程将连同一个已初始化了的堆栈一起被创建,堆栈的大小

由可执行文件的文件头中的描述决定。线程由文件头处开始执行。

新进程和新线程的句柄被以全局访问权限创建。对于这两个句柄中的任一个,如果没有安全描述符,那么这个句柄就可以在任何需要句柄类型作为参数的函数中被使用。当提供安全描述符时,在接下来的时候当句柄被使用时,总是会先进行访问权限的检查,如果访问权限检查拒绝访问,请求的进程将不能使用这个句柄访问这个进程。

这个进程会被分配给一个32位的进程标识符。直到进程中止这个标识符都是有效的。它可以被用来标识这个进程,或在OpenProcess 函数中被指定以打开这个进程的句柄。进程中被初始化了的线程一样会被分配一个32位的线程标识符。这个标识符直到线程中止都是有效的且可以用来在系统中唯一标识这个线程。这些标识符在PROCESS_INFORMATION结构体中返回。

当在lpApplicationName或lpCommandLine参数中指定应用程序名时,应用程序名中是否包含扩展名都不会影响运行,只有一种情况例外:一个以.com为扩展名的MS-DOS程序或Windows程序必须包含.com扩展名。

调用进程可以通过WaitForInputIdle函数来等待新进程完成它的初始化并等待用户输入。这对于父进程和子进程之间的同步是极其有用的,因为CreateProcess函数不会等待新进程完成它的初始化工作。举例来说,在试图与新进程关联的窗口之前,进程应该先调用WaitForInputIdle。

首选的结束一个进程的方式是调用ExitProcess函数,因为这个函数通知这个进程的所有动态链接库(DLLs)程序已进入结束状态。其他的结束进程的方法不会通知关联的动态链接库。注意当一个进程调

用ExitProcess时,这个进程的其他线程没有机会运行其他任何代码(包括关联动态链接库的终止代码)。

ExitProcess,ExitThread,CreateThread,CreateRemoteThread,当一个进程启动时(调用了CreateProcess的结果)是在进程中序列化进行的。在一段地址空间中,同一时间内这些事件中只有一个可以发生。这意味着下面的限制将保留:

*在进程启动和DLL初始化阶段,新的线程可以被创建,但是直到进程的DLL初始化完成前它们都不能开始运行。

*在DLL初始化或卸下例程中进程中只能有一个线程。

*直到所有的线程都完成DLL初始化或卸下后,ExitProcess函数才返回。

在进程中的所有线程都终止且进程所有的句柄和它们的线程被通过调用CloseHandle函数终止前,进程会留在系统中。进程和主线程的句柄都必须通过调用CloseHandle函数关闭。如果不再需要这些句柄,最好在创建进程后立刻关闭它们。

当进程中最后一个线程终止时,下列的事件发生:

*所有由进程打开的对象都会关闭。

*进程的终止状态(由GetExitCodeProcess函数返回)从它的初始值STILL_ACTⅣE变为最后一个结束的线程的结束状态。

*主线程的线程对象被设置为标志状态,供其他等待这个对象的线程使用。

*进程对象被设置为标志状态,供其他等待这个对象的线程使用。

假设当前在C盘上的目录是\MSVC\MFC且有一个环境变量叫做C:,它的值是C:\MSVC\MFC,就像前面lpEnvironment中提到过的那

样,这样的系统驱动器上的目录信息在CreateProcess函数的lpEnvironment参数不为空时不会被自动传递到新进程里。一个应用程序必须手动地把当前目录信息传递到新的进程中。为了这样做,应用程序必须直接创建环境字符串,并把它们按字母顺序排列(因为Windows NT和Windows 95使用一种简略的环境变量),并把它们放进lpEnvironment中指定的环境块中。类似的,他们要找到环境块的开头,又要重复一次前面提到的环境块的排序。

一种获得驱动器X的当前目录变量的方法是调用GetFullPathName("x:",..)。这避免了一个应用程序必须去扫描环境块。如果返回的绝对路径是X:\,就不需要把这个值当作一个环境数据去传递了,因为根目录是驱动器X上的新进程的默认当前目录。

由CreateProcess函数返回的句柄对于进程对象具有PROCESS_ALL_ACCESS的访问权限。

由lpcurrentDirectory参数指定的当前目录室子进程对象的当前目录。lpCommandLine参数指定的第二个项目是父进程的当前目录。

对于Windows NT,当一个进程在指定了CREATE_NEW_PROCESS_GROUP的情况下被创建时,一个对于SetConsoleCtrlHandler(NULL,True)的调用被用在新的进程上,这意味着对新进程来说CTRL+C是无效的。这使得上层的外科程序可以自己处理CTRL+C信息并有选择的把这些信号传递给子进程。CTRL+BREAK依旧有效,并可被用来中断进程/进程树的执行。

6、安全注释

第一个参数lpApplicationName可能是空,这种情况下,可执行文件的名字必须在lpCommandLine中,lpCommandLine参数中可以包

含空格。如果可执行文件或路径中包含空格,那么就会有执行不正确文件的风险,这是由于这个函数解析空格的方法引起的。例如:下边这个例子就很危险,因为它试图运行Program.exe文件,如果这个文件存在,它就会代替MyApp.exe文件的运行。

CreateProcess(NULL,”C:\\Program Files\\MyApp.exe”,…….)

如果有恶意的用户在系统编写了一个名为Program.exe的文件,那么任何调用CreateProcess函数,且在文件路径中使用Program Files 文件夹的参数,都有可能会运行Program.exe文件,而不是运行本来打算运行的文件。

要避免这个问题,可以不要将NULL值传递给lpApplicationName 参数,或者在lpCommandLine中使用双引号(转义符)括起可执行文件的全路径名,如下所示:

CreateProcess(NULL,”\”C:\\Program Files\\MyApp.exe\”-L -S”,…….)

-L和-S是MyApp.exe可执行文件的参数。

最后要说明的一点是:在lpApplicationName中的参数和lpCommandLine中的第一个参数是一样的,有人说显得有些重复,其实这样做纯粹是一种被公认化了习惯!

7、用例

STARTUPINFO StartupInfo = {0};

PROCESS_INFORMATION ProcessInfo = {0};

BOOL bRet = FALSE;

UINT uResult = 0;

TCHAR CommandLine[MAX_PATH] = {0};

TCHAR AppName[MAX_PATH] = {0};

StartupInfo.cb = sizeof(STARTUPINFO);

StartupInfo.wShowWindow = SW_SHOW;

StartupInfo.dwFlags = STARTF_USESHOWWINDOW;

uResult = GetSystemDirectory(AppName, MAX_PATH);

lstrcat(AppName, __T("\\cmd.exe"));

lstrcat(CommandLine, __T("/c dir"));

bRet = CreateProcess(AppName, CommandLine, NULL, NULL, TRUE, 0, NULL, NULL, &StartupInfo, &ProcessInfo);

if (ProcessInfo.hProcess)

WaitForSingleObject(ProcessInfo.hProcess, INFINITE);

if (ProcessInfo.hProcess)

CloseHandle(ProcessInfo.hThread);

if (ProcessInfo.hThread)

CloseHandle(ProcessInfo.hProcess);

8、重定向标准输出流

利用管道技术实现父进程和子进程之间的通信,紫禁城将执行结

果重定向写入管道,父进程读取内容即可。

HANDLE hPipeRead = NULL;

HANDLE hPipeWrite = NULL;

BOOL bRes = FALSE;

DWORD dwRead = 0;

DWORD dwAvail = 0;

CHAR rdBuffer[1400] = {0};

SECURITY_ATTRIBUTES SecurityAttr = {0};

//创建匿名管道

SecurityAttr.nLength = sizeof(SECURITY_ATTRIBUTES);

SecurityAttr.lpSecurityDescriptor = NULL;

SecurityAttr.bInheritHandle = TRUE;

bRes = CreatePipe(&hPipeRead,&hPipeWrite,&SecurityAttr,0);

//重定向StartupInfo的标准输出流和标准错误流

StartupInfo.hStdOutput = hPipeWrite;

StartupInfo.hStdError = hPipeWrite;

//启用标准输入输出流

StartupInfo.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;

//进程创建后,读取管道的内容即可

bRet = ReadFile(hPipeRead,rdBuffer,1024,&dwRead,NULL);

//后续可在rdBuffer读取命令执行结果

9、隐藏控制台窗口

只需在StartupInfo里设置窗口属性为隐藏即可

StartupInfo.wShowWindow = SW_HIDE;

附录

1、STARTUPINFO结构

1)定义

typedef struct _STARTUPINFO {

DWORD cb;

LPTSTR lpReserved;

LPTSTR lpDesktop;

LPTSTR lpTitle;

DWORD dwX;

DWORD dwY;

DWORD dwXSize;

DWORD dwYSize;

DWORD dwXCountChars;

DWORD dwYCountChars;

DWORD dwFillAttribute;

DWORD dwFlags;

WORD wShowWindow;

WORD cbReserved2;

LPBYTE lpReserved2;

HANDLE hStdInput;

HANDLE hStdOutput;

HANDLE hStdError;

} STARTUPINFO, *LPSTARTUPINFO;

2)参数

STARTUPINFO结构该结构用于指定新进程的主窗口特性

DWORD cb; //包含STARTUPINFO结构中的字节数.如果Microsoft 将来扩展该结构,它可用作版本控制手段.

应用程序必须将cb初始化为sizeof(STARTUPINFO)

PSTR lpReserved; //保留。必须初始化为N U L L

PSTR lpDesktop; //用于标识启动应用程序所在的桌面的名字。如果该桌面存在,新进程便与指定的桌面相关联。

如果桌面不存在,便创建一个带有默认属性的桌面,并使用为新进程指定的名字。

如果lpDesktop是NULL(这是最常见的情况),那么该进程将与当

前桌面相关联

PSTR lpTitle; //用于设定控制台窗口的名称。如果l p Ti t l e 是N U L L ,则可执行文件的名字将用作窗口名

DWORD dwX; //用于设定应用程序窗口在屏幕上应该放置的位置的x 和y 坐标(以像素为单位)。

DWORD dwY; 只有当子进程用CW_USEDEFAULT作为CreateWindow的x参数来创建它的第一个重叠窗口时,

才使用这两个坐标。若是创建控制台窗口的应用程序,这些成员用于指明控制台窗口的左上角

DWORD dwXSize; //用于设定应用程序窗口的宽度和长度(以像素为单位)只有dwYsize

DWORD dwYSize; 当子进程将C W _ U S E D E FA U LT 用作C r e a t e Wi n d o w 的

n Wi d t h参数来创建它的第一个重叠窗口时,才使用这些值。

DWORD dwXCountChars; //用于设定子应用程序的控制台窗口的宽度和高度(以字符为单位)

DWORD dwYCountChars;

DWORD dwFillAttribute; //用于设定子应用程序的控制台窗口使用的文本和背景颜色

DWORD dwFlags; //请参见下一段和表4 - 7 的说明

WORD wShowWindow; //用于设定如果子应用程序初次调用的S h o w Wi n d o w 将S W _ S H O W D E FA U LT 作为

n C m d S h o w参数传递时,该应用程序的第一个重叠窗口应该如何出现。

本成员可以是通常用于Show Wi n d o w 函数的任何一个S W _ *标识符

WORD cbReserved2; //保留。必须被初始化为0

PBYTE lpReserved2; //保留。必须被初始化为N U L L

HANDLE hStdInput; //用于设定供控制台输入和输出用的缓存的句柄。

按照默认设置,h S t d I n p u t 用于标识键盘缓存,

h S t d O u t p u t 和h S t d E r r o r用于标识控制台窗口的缓存

HANDLE hStdOutput;

HANDLE hStdError;

当Wi n d o w s 创建新进程时,它将使用该结构的有关成员。大多数应用程序将要求生成的应用程序仅仅使用默认值。至少应该将该结构中的所有成员初始化为零,然后将c b 成员设置为该结构的大小:STARTUPINFO si = { sizeof(si) };

CreateProcess(...,&si,...);

表4-7 dwFlags 使用标志及含义

标志含义

STARTF_USESIZE // 使用d w X S i z e 和d w Y S i z e 成员

STARTF_USESHOWWINDOW //使用w S h o w Wi n d o w 成员

STARTF_USEPOSITION //使用d w X 和d w Y 成员

STARTF_USECOUNTCHARS //使用d w X C o u n t C h a r s 和dwYCount Chars 成员

STARTF_USEFILLATTRIBUTE //使用d w F i l l A t t r i b u t e 成员

STARTF_USESTDHANDLES //使用h S t d I n p u t 、h S t d O u t p u t 和h S t d E r r o r 成员

STARTF_RUN_FULLSCREEN //强制在x 8 6 计算机上运行的控制台应用程序以全屏幕方式启动运行

另外还有两个标志,即STARTF_FORCEONFEEDBACK和STARTF_+FORCEOFFF -EEDBACK ,当启动一个新进程时,它们可以用

来控制鼠标的光标。由于Windows支持真正的多任务抢占式运行方式,因此可以启动一个应用程序,然后在进程初始化时,使用另一个程序。为了向用户提供直观的反馈信息,C r e a t e P r o c e s s 能够临时将系统的箭头光标改为一个新光标,即沙漏箭头光标:该光标表示可以等待出现某种情况,也可以继续使用系统。当启动另一个进程时,CreateProcess函数使你能够更好地控制光标。当设定STARTF_FORCEONFEEDBACK标志时,C r e a t e P r o c e s s 并不将光标改为沙漏。

STARTF_FORCEONFEEDBACK可使CreateProcess能够监控新进程的初始化,并可根据结果来改变光标。当使用该标志来调用CreateProcess时,光标改为沙漏。过2 s 后,如果新进程没有调用G U I ,CreateProcess 将光标恢复为箭头。

如果该进程在2 s 内调用了GUI ,CreateProcess将等待该应用程序显示一个窗口。这必须在进程调用G U I 后5 s内发生。如果没有显示窗口,CreateProcess就会恢复原来的光标。如果显示了一个窗口,CreateProcess将使沙漏光标继续保留5s 。如果某个时候该应用程序调用了G e t M e s s a g e 函数,指明它完成了初始化,那么C r e a t e P r o ce s s 就会立即恢复原来的光标,并且停止监控新进程。

在结束这一节内容的介绍之前,我想讲一讲S TA RT U P I N F O 的w S h o w Wi n d o w成员。你将该成员初始化为传递给( w ) Wi n M a i n 的最后一个参数n C m d S h o w的值。该成员显示你想要传递给新进程的( w ) Wi n M a i n 函数的最后一个参数n C m d S h o w的值。它是可以传递给S h o w Wi n d o w 函数的标识符之一。通常,n C m d S h o w 的值既可以是S W _ SH O W N O R M A L ,也可以是SW_

命令行窗口使用

命令行窗口操作 设置命令行窗口 (2) 典型的操作的说明 (5) 编译源文件 (5) 执行源文件 (5)

设置命令行窗口 点击开始菜单→运行或者按组合键WinKey + R,得到运行对话框, 敲入命令cmd回车或确定。在得到的命令行窗口标题右击→属性 在弹出的对话框中,设置参数如下: 布局 屏幕缓冲区大小:90 * 300 窗口大小:90 * 20 颜色 屏幕文字:RGB(0,0,0) 屏幕背景:RGB(255,255,255) [具体值可自行设置,截图如下]

点击 确定,选择 保持属性,供以后具有相同标题的窗口使用,点击确定完成。

最终的窗口效果如下: 可以在窗口中敲入命令,进行操作。

典型的操作的说明Windows Shell 常用命令 1. 切换盘符 2. 切换当前路径 3. 调用外部命令和执行可运行程序编译源文件 执行源文件

附表:以下列出可以在Windows XP的“运行”窗口中运行的应用程序。 运行程序运行命令辅助功能选项access.cpl 添加硬件向导hdwwiz.cpl 添加或删除程序appwiz.cpl 管理工具control admintools 自动更新wuaucpl.cpl Bluetooth文件传送向导fsquirt 计算器calc 证书管理控制台certmgr.msc 字符映射表charmap 磁盘检查工具chkdsk 剪贴簿查看器clipbrd 命令行提示符cmd 组件服务dcomcnfg 计算机管理compmgmt.msc 日期和时间属性timedate.cpl DDE共享ddeshare 设备管理器devmgmt.msc Direct X控制面板(如果已经安装)* directx.cpl Direct X诊断工具dxdiag 磁盘清理工具cleanmgr 磁盘碎片整理程序dfrg.msc 磁盘管理diskmgmt.msc 磁盘分区管理器diskpart

7-Zip命令行说明

7-Zip命令行说明 整理自:P57(https://www.wendangku.net/doc/d61844068.html,) 7z.exe 是7-Zip 的命令行版本。7z.exe 使用7-Zip 的其它模块,7za.exe 是7-Zip 的独立版本,7za.exe 仅支持7z、zip、gzip、bzip2 和tar 格式,7za.exe 使用时不会调用其它模块。 命令行选项 7z [命令行] [[选项]...] [基本档案名称] [[参数变量]...] 7z [command] [[switch]...] [base_archive_name] [[arguments]...] [参数变量] ::= [选项] | [通配符] | [文件名] | [文件列表] [选项]::= [选项标记][选项字符][[选项]] [选项标记] ::= '/' | '-' [文件列表] ::= @{文件名} [arguments] ::= [switch] | [wildcard] | [filename] | [list_file] [switch]::= [switch_symbol][switch_characters][[option]] [switch_symbol] ::= '/' | '-' [list_file] ::= @{filename} 在方括号内的表达式(“[” 和“]”之间的字符)是可选的。 在书名号内的表达式(“[” 和“]”之间的字符)是必须替换的表达式(而且要去掉括号)。 表达式 expression1 | expression2 | ... | expressionN

命令行及选项使用大写或小写字母都可以。 首个命令行必须是无选项的参数变量。 选项及其它文件名的输入顺序可以打乱。 带有空格的通配符或文件名必须加上引号: "Dir\Program files\*" Dir\"Program files"\* 通配符是一个键盘字符,例如星号(*)或问号(?),当执行添加文件、释放文件、选定文件、删除文件等操作时,您可以使用它来代表一个或多个字符。当您不知道真正字符或者不想键入完整名称时,常常使用通配符代替一个或多个字符。 7-Zip 支持和Windows 相类似的通配符: “*”可以使用星号代替零个或多个字符。 “?”可以用问号代替名称中的单个字符。 7-Zip 使用的并不是系统处理通配符的默认方法,因而7-Zip 不支持其它通配符规则,在系统中*.* 相当于所有文件。而7-Zip 会将其视为任何扩展名的全部文件。所以要处理所有文件您必须使用* 通配符。 示例: *.txt 这样会查找(添加、选定……)所有扩展名是“.txt”的文件 ?a* 这样会查找(添加、选定……)所有第二个字母为“a”的文件

常见DOS命令大全和使用方法

Windows DOS窗口打开方法,开始-运行-输入CMD-回车确认即可打开。DOS常用命令大全dos命令 dos下各种常见命令索引 ▲dir ▲attrib ▲cd ▲copy ▲xcopy ▲del ▲undelete ▲deltree ▲dos=high ▲doskey ▲emm386.exe ▲fc ▲format ▲unformat ▲interlnk ▲intersvr ▲memmaker ▲memitem等 ▲mscdex ▲msd

▲prompt ▲ramdrive ▲subst ▲mem ▲"><>><<"工具 ▲move ▲append ▲call ▲defrag ▲device 一、DIR 命令的格式: dir [D:][PATH][NAME][[/A][:attrib]][/o:[sorted][/s][/b][/l][/c[h] (1)dir /a:attrib 缺省包含所有文件(系统文件.隐含文件) attrib[:][h/-h]只显示隐含文件或非隐含文件. [r/-r]只显示只读文件或非只读文件 [s/-s]只显示系统文件或非系统文件 [a/-a]只显示要归档文件或非归档文件 (2)/o[:]sorted:缺省完全按字母顺序,子目录显示在文件之前/o[n/-n]:按字母顺序或按文件名顺序/反向显示 [e/-e]:按扩展名字母顺序/反向显示 [d/-d]:按时间顺序/反向显示 [s/-s]:按大小从大到小或/反向显示

[g/-g]:按子目录先于文件或文件先于子目录 (3)/s 参数:对当前目录及其子目录中所有文件进行列表 列名:dir /s/a/o:n c:\>PRN 将c盘上的所有子目录和文件按隶属关系并根据子目录和文件字母顺序打印输出 (4)/B 参数:将只显示文件名与扩展名 (5)/L 参数:将全部用小写字母对文件或子目录进行列表 训练: dir /a 列当前目录所有文件(含隐含及系统文件) dir /ah 列隐含文件(包含子目录(隐含的) dir /a-h dir /as 列系统文件dir /a-s dir /ad 列子目录dir /a-d dir /o 按字母顺序 dir /B 只显示文件名与扩展名 二、attrib [+r|-r] [+a|-a] [+s|-s] [+h|-h] [d: ] [name] [/s] 缺省attrib name 显示文件的(文件)属性 attrib io.sys (或子目录) shr c:\ io.sys 指定为系统(s) 隐含(h) 只读(r)文件 也可以attrib *.sys 显示扩展名为sys的文件属性 参数[+r|-r] 将文件属性设置或解除只读属性 [+a|-a] 将文件属性设置或解除归档属性 [+h|-h] 将文件属性设置或解除隐含属性(尤其对子目录也起作用) /s 参数将当前及当前子目录下的所有文件均起作用

Winrar使用方法

Winrar使用方法(详细) Winrar的使用方法 操作步骤 1.制作自解压文件 如果你平时使用WinRAR来压缩文件,而你的朋友也不会使用WinRAR,但你的数据又确实必须压缩后才能够给他。这时,我们就可以把RAR 压缩包制作成EXE文件。他只要执行生成后EXE 文件即可解压。 (1)直接生成法 如,我们要把C:\总管资料.txt文件压缩成EXE 格式文件,则可以启动“资源管理器”,选中C:\总管资料.txt文件,右击,选择WinRAR→“添加到压缩包”命令。然后在打开“压缩文件名和参数”设置窗口中选中“压缩选项”下的“创建自解压格式压缩文件”前复选框(如图1)。单击“确定”按钮即可把选定文件压缩成自解压的文件。

(2)转换法 如果我们手头上有RAR压缩包,那也可以通过WinRAR,把它转换为EXE文件:启动WinRAR,再定位到RAR压缩包文件夹下,选中RAR压缩包,再选择“工具”→“压缩文件转换为自解压格式”(如图2)或者按下Alt+X键,单击“确定” 按钮即可生成自解压文件。 我们只要把这个生成后的EXE文件通过电子邮件寄给朋友,他们收到后,只要直接双击即可

把压缩包中的文件解压到当前文件夹下。 注意:如果发生损坏,无法自解压,那可以把此文件的扩展名改为由EXE改为RAR,双击后即可使用WinRAR打开,并可以自己解压了。 2.把WinRAR当成文件管理器 WinRAR是一个压缩和解压缩工具,但它也是一款相当优秀的文件管理器。只要我们在其地址栏中键入一个文件夹,那其下的所有文件都会被显示出来,甚至连隐藏的文件和文件的扩展名也能够看见!我们完全可以像在“资源管理器”中一样拷贝、删除、移动、运行这些文件(如图3)! 3.修复受损的压缩文件

RAR的命令行使用

使用RAR版本:WinRAR 3.20 beta 2(? 1993-2003 Eunege Roshal ) 用法: rar <命令>-<开关1> -<开关N> <压缩文件> <文件...> <@列表文件...> <解压路径\> <命令> a 添加文件到压缩文件 c 添加压缩文件注释 cf 添加文件注释 cw 写入压缩文件注释到文件 d 删除压缩文件中的文件 e 解压压缩文件到当前目录 f 刷新压缩文件中的文件 i[参数]=<串> 在压缩文件中查找字符串 k 锁定压缩文件 l[t,b] 列出压缩文件[技术信息,简洁] m[f] 移动到压缩文件[仅对文件] p 打印文件到标准输出设备 r 修复压缩文件

rc 重建丢失的卷 rn 重命名压缩文件 rr[N] 添加数据恢复记录 rv[N] 创建恢复卷 s[名字|-] 转换压缩文件为自解压格式或转换回压缩文件 t 测试压缩文件 u 更新压缩文件中的文件 v[t,b] 详细列出压缩文件[技术信息,简洁] x 用绝对路径解压文件 <开关> - 停止扫描 ac 压缩或解压后清除文件属性 ad 添加压缩文件名到目标路径 ag[格式] 使用当前日期生成压缩文件名 ao

添加具有压缩属性的文件 ap<格式> 添加路径到压缩文件中 as 同步压缩文件内容 av 添加用户身份校验(仅注册版本可用) av- 禁用用户身份校验 c- 禁用注释显示 cfg- 禁用读取配置 cl 名称转换为小写 cu 名称转换为大写 df 压缩后删除文件 dh 打开共享文件 ds 对固实压缩文件禁用名称排序 e<属性> 设置文件排除属性 ed 不添加空目录 en 不添加"压缩文件结束"标志

WinRAR 压缩软件使用基础教程

WinRAR 压缩软件使用基础教程 1:安装软件 1、下载压缩软件 1)从互联网上可以下载,常见的有Winrar、Winzip、7-Zip等等; 2)也可以从一些工具光盘中获得,是一个可执行程序; 2、安装压缩软件 1)双击安装文件,出现第一个安装界面,上面是安装位置,中间是简介,点下面的“安装”; 2)安装后出现文件关联界面,把左边的第一个和第二个和最下面的勾留下,其他的都点一下去掉,再把右边的“创建WinRAR程序组”的勾也点一下去掉,然后点它下边的“选择关联菜单项目...”;

2:解压文件 1、获得压缩文件 1)从互联网上可以下载,常见的格式有rar、zip、7z等; 2)也可以通过软盘、光盘、U盘中获得,把文件复制到自己的文件夹中; 3)准备好一个文件,我们用它来练习,用文本文档或者电子表格; 2、解压文件 1)瞄准压缩文件敲右键,在弹出的菜单中选择“解压到当前文件夹”; 这样就把文件解压到了当前的位置,压缩文件中只有一个文件,可以用这个方法; 2)瞄准压缩文件敲右键,在弹出的菜单中选择“解压到文件夹\(E)”;

这样就把文件解压到一个新的文件夹中,文件夹的名称就是压缩文件名,压缩文件中有许多文件时,可以用这个命令; 3)瞄准压缩文件敲右键,在弹出的菜单中选择“解压文件(A)...”; 这时候会弹出一个对话框,在这儿可以选择解压的位置,然后点下边的“确定”; 这儿直接点确定也可以,就跟第2个命令是一样的,解压到一个新的文件夹中,还可以在目标路径的后面输入新的名字; 3、压缩文件 1、直接压缩 1)瞄准要压缩的文件,点右键选“添加到文件名.r ar”;

windows中winrar命令行方式使用

windows中winrar命令行方式使用 在Windows系统中的文件压缩/解压缩工具winrar功能强大,虽然我们都习惯于用图形界面的winrar,但是它也能在命令行方式下面使用,这在企图让winrar批量自动压缩解压缩的时候尤其有用。 它自带的帮助也非常的全面,现在从中择出来一些比较常用的总结一下,以免再找的时候比 较头晕 1,最简单的压缩命令: winrar a asdf.txt.rar asdf.txt a的意思是进行压缩动作,后面第一个参数是被压缩后的文件名,后缀当然是rar 了,最后面 的参数就是要被压缩的文件名 2,最简单的解压缩命令: winrar e asdf.txt.rar e的意思是执行解压缩,解压缩的文件是后面这唯一的参数,但是这个e解压缩是把解出来的 文件释放到当前目录下面,与asdf.txt.rar文件并列了,因此,更加实用的是下面的带路径 解压缩。 3,带路径的解压缩命令: winrar x asdf.rar x的意思是执行带绝对路径解压动作,这会在当前文件夹下创建一个文件夹asdf,把压缩包 里的文件、文件夹不改动结构释放到文件asdf里面,就像我们在winrar的图形界面下看到的 一样。 4,指定压缩级别压缩:

winrar a -m5 asdf.tr.rar asdf.tr 要被压缩的不再是一个txt文本,而是一个文本格式的十几M的仿真数据文件,希望能够最大 程度的压缩。使用压缩参数-m5。在winrar中,执行操作是不带前导-符号的参数,比如“a ”或“x”,而修饰这种动作的参数,使用带前导符号“-”的参数,比如-m5。其中-m就是 指定压缩级别的参数,压缩级别有如下五级: -m0 存储添加到压缩文件时不压缩文件。 -m1 最快使用最快方式(低压缩 -m2 较快使用快速压缩方式 -m3 标准使用标准(默认压缩方式 -m4 较好使用较好压缩方式(较好压缩,但是慢 -m5 最好使用最大压缩方式(最好的压缩,但是最慢 默认的是-m3级别,级别不同,对于大数据量的文本文件压缩后的文件大小有很大的差异 5,指定压缩后删除原文件: winrar a -m5 -df asdf.tr.rar asdf.tr 用参数-df指定压缩为asdf.tr.rar压缩文件后,删除原文件asdf.tr,也可以是: winrar m -m5 asdf.tr.rar asdf.tr 这个m的意思是把文件asdf.tr移动入压缩文件asdf.tr.rar中 6,创建自解压文件: winrar s asdf.tr.rar 在gui界面中,创建自解压文件是有个选项可以直接选择的。而在命令行中,是分为两个步 骤的,第一步是用压缩命令进行压缩:

7z命令行使用方法

7z.exe在CMD窗口的使用说明如下: 7-Zip(A)4.57Copyright(c)1999-2007Igor Pavlov2007-12-06 Usage:7za[...][...] [<@listfiles...>] a:Add files to archive b:Benchmark d:Delete files from archive e:Extract files from archive(without using directory names) l:List contents of archive t:Test integrity of archive u:Update files to archive x:eXtract files with full paths -ai[r[-|0]]{@listfile|!wildcard}:Include archives -ax[r[-|0]]{@listfile|!wildcard}:eXclude archives -bd:Disable percentage indicator -i[r[-|0]]{@listfile|!wildcard}:Include filenames -m{Parameters}:set compression Method -o{Directory}:set Output directory -p{Password}:set Password -r[-|0]:Recurse subdirectories -scs{UTF-8|WIN|DOS}:set charset for list files -sfx[{name}]:Create SFX archive -si[{name}]:read data from stdin -slt:show technical information for l(List)command -so:write data to stdout -ssc[-]:set sensitive case mode -ssw:compress shared files -t{Type}:Set type of archive -v{Size}[b|k|m|g]:Create volumes -u[-][p#][q#][r#][x#][y#][z#][!newArchiveName]:Update options -w[{path}]:assign Work directory.Empty path means a temporary directory -x[r[-|0]]]{@listfile|!wildcard}:eXclude filenames -y:assume Yes on all queries 中文使用说明如下: 语法 2U:}*K-X4U#@p%Q2E/x7z<命令行>[<选项>...]<基本档案名称>[<参数变量>...] #N,x!L1@8c#f#A({-H:c1k7z[...]

WinRAR使用教程

WinRAR使用教程 压缩软件是为了使文件的大小变得更小便于交流而诞生的。WinRAR是在windows 的环境下对.rar 格式的文件(经WinRAR压缩形成的文件)进行管理和操作的一款压缩软件。这是一个相当不错的软件,可以和winzip(老牌解压缩软件)相媲美。在某些情况下,它的压缩率比winzip 还要大。WinRAR 的一大特点是支持很多压缩格式,除了.rar 和.zip格式(经winzip压缩形成的文件)的文件外,WinRAR 还可以为许多其他格式的文件解压缩,同时,使用这个软件也可以创建自解压可执行文件。现在,我们简要说明一下这个软件的应用。 一、WinRAR 的安装 WinRAR 的安装十分简单,您只要双击下载后的安装文件,就会出现图1 的(中文)安装画面。 (图1 WinRAR 中文安装界面) (图2 WinRAR 安装选项)

(图3) 在图1 中通过点“浏览”选择好安装路径后点“安装”就可以开始安装了。在然后会出现图2 WinRAR 安装选项的画面。(设置这些选项时,只需在相应选项前的方框内单击即可,若需取消相应选项,在单击选项前的方框即可)。第一个选项组“WinRAR 关联何种文件”,是用来选择由WinRAR 处理的压缩文件类型,选项中的文件扩展名就是WinRAR 支持的多种压缩格式。第二个选项组“界面设置”是用来选择放置WinRAR 可执行文件链接的地方,即选择WinRAR在windows 中的位置行。最后一个选项组“外壳集成”,是在右键菜单等处创建快捷方式。一般情况下按照安装的默认设置就可以了。设置完后点“确定”就会出现图3的画面。点击“完成”,整个WinRAR的安装就完成了。 二、WinRAR使用(压缩和解压) 1.压缩文件 (图4)

WINRAR压缩软件的使用方法

WINRAR压缩软件的使用方法 WinRAR是一个文件压缩管理共享软件,由Eugene Roshal(所以RAR的全名是:Roshal ARchive)开发。首个公开版本RAR 1.3发布于1993年。Pocket RAR 是为Pocket PC平台发布的免费软件。它是仅有的几个可以读写RAR文件的软件之一,因为它保留版权。 Eugene Roshal,1972年3月10日生于俄罗斯。毕业于俄罗斯车里雅宾斯克工业大学(Chelyabinsk Technical University),也是FAR文件管理器的作者。他开发程序压缩/解压RAR文件,最初用于DOS,后来移植到其它平台。主要的Windows版本编码器,称为WinRAR,以共享软件的形式发行。不过Roshal公开了解码器源码,UnRAR解码器许可证允许有条件自由发布与修改(条件:不许发布编译RAR兼容编码器)。而RAR编码器一直是有专利的。 最近的开发者是Alexander Roshal。虽然其解码器有专利,编译好的解压程序仍然存在于若干平台,例如开源的7-Zip。尽管业界普遍混乱,似乎没有纯开源模块能解压版本超过2.0的RAR文件 WinRAR 内置程序可以解开CAB、ARJ、LZH、TAR、GZ、ACE、UUE、BZ2、JAR、ISO、Z和7Z等多种类型的档案文件、镜像文件和 TAR 组合型文件;具有历史记录和收藏夹功能;新的压缩和加密算法,压缩率进一步提高,而资源占用相对较少,并可针对不同的需要保存不同的压缩配置;固定压缩和多卷自释放压缩以及针对文本类、多媒体类和 PE 类文件的优化算法是大多数压缩工具所不具备的;使用非常简单方便,配置选项也不多,仅在资源管理器中就可以完成你想做的工作;对于 ZIP 和 RAR 的自释放档案文件,点击属性就可以轻易知道此文件的压缩属性,如果有注释,还能在属性中查看其内容;对于 RAR 格式(含自释放)档案文件提供了独有的恢复记录和恢复卷功能,使数据安全得到更充分的保障。 WinRAR是共享软件。任何人都可以在40天的测试期内使用它。如果你希望在测试过期之后继续使用 WinRAR,你必须注册。 它没有其它附加的许可费用。除了与创建和发布 RAR压缩文件或自解压格式压缩文件相关的注册成本之外,没有其它附加许可费用。合法的注册用户可以使用他们的 RAR副本制作发布压缩文件而无须任何附加的 RAR 版税。如果你注册了 WinRAR,可以免费升级所有的最新版本。

路由器命令行(CLI)操作

本部分包括以下内容: 命令模式 命令模式的切换 CLI命令的编辑技巧 常见CLI错误提示 使用no 和default 选项 命令模式 交换机和路由器的命令是按模式分组的,每种模式中定义了一组命令集,所以想要使用某个命令,必须先进入相应的模式。各种模式可通过命令提示符进行区分,命令提示符的格式是: 提示符名模式 提示符名一般是设备的名字,交换机的默认名字“Switch”,路由器的默认名字是“Router”(锐捷设备的默认名字是“Ruijie”),提示符模式表明了当前所处的模式。如:“>”代表用户模式,“#”代表特权模式。 以下是常见的几种命令模式:

命令模式的切换 交换机和路由器的模式大体可分为四层:用户模式→特权模式→全局配置模式→其它配置模式。 进入某模式时,需要逐层进入。 说明:interface等命令都是带参数的命令,应根据情况使用不同参数。 特例:当在特权模式下输入Exit 命令时,会直接退出登录,不是回到用户模式。从特权模式返回用户模式的命令是disable。 CLI命令的编辑技巧 CLI(命令行)有以下特点。 1、命令不区分大小写。

2、可以使用简写。 命令中的每个单词只需要输入前几个字母。要求输入的字母个数足够与其它命令相区分即可。如:configure terminal命令可简写为conf t。 3、用Tab 键可简化命令的输入。 如果你不喜欢简写的命令,可以用Tab 键输入单词的剩余部分。每个单词只需要输入前几个字母,当它足够与其它命令相区分时,用Teb 键可得到完整单词。如:输入conf(Tab) t(Tab)命令可得到configure terminal。 4、可以调出历史来简化命令的输入。 历史是指你曾经输入过的命令,可以用“↑”键和“↓”键翻出历史命令再回车就可执行此命令。(注:只能翻出当前提示符下的输入历史。) 系统默认记录的历史条数是10条,你可以用history size 命令修改这个值。 5、编辑快捷键: Ctrl+A——光标移到行首,Ctrl+E——光标移到行尾。 6、用“?”可帮助输入命令和参数。 在提示符下输入“?”可查看该提示符下的命令集,在命令后加“?”,可查看它第一个参数,在参数后再加“?”,可查看下一个参数,如果遇到提示“”表示命令结束,可以回车了。 常见CLI错误提示 % Ambiguous command: "show c" 用户没有输入足够的字符,设备无法识别唯一的命令。 % Invomplete command. 命令缺少必需的关键字或参数。 % Invalid input detected at '^' marker.

7zip使用方法详解

7zip使用方法详解 主要有两种用法: 1 直接解压缩(相对比较简单)    使用命令:       7z a out.exe -sfxfile.sfx @list.txt    其中out.exe是输出文件的文件名;file.sfx是自解压的sfx文件,利用此文件我们可以 改变输出文件的图标(具体做法见"ResHacker的使用"一节);list.txt是要打包的文件名列表。 list.txt示例: "eclipse*" "eclipseconfiguration*" 2 可执行的安装文件打包成7z格式    首先把安装文件打成7z包,然后给自己的安装文件做个图标,用此图标做一个sfx文件( 参见"ResHacker的使用"一节) 根据7-zip的帮助文件,做一个config.txt文件(注意:此文件一定要用UTF-8编码),例: ;!@Install@!UTF-8! Title="7-Zip 2.30" BeginPrompt="Do you want to install the 7-Zip 2.30?" RunProgram="Setup.exe /T:%%T" ;!@InstallEnd@! 最后在命令行下copy /b 7zS.sfx + config.txt + archive.7z archive.exe 即可 7-Zip有3种可以使用的模块和程序,

第一、常用的7zFM.exe(图文界面的主程序); 第二、命令行模式的7z.exe; 第三、就是你需要的自解压模块7z.sfx。 想要创建自解压的exe很简单,首先使用7zFM.exe创建一个.7z的压缩文件,然后进入windwos命令提示符用个命令搞定。 copy/b 7zS.sfx+123.7z 123.exe(把7zS.sfx和123.7z放在一个目录) 当然比WinRAR那种创建自解压的方式复杂了一点点,7-Zip也支持一些配置,写在config.txt里面一起加入即可。

7zip的详细命令行中文说明

7zip的详细命令行中文说明 7-zip是压缩率相当高的一个压缩软件,所以会经常用到,特别是在自动批处理备份文件的时候,尤其用到。 7z.exe 是7-Zip 的命令行版本。 7z.exe 使用7-Zip 的其它模块,7za.exe 是7-Zip 的独立版本,7za.exe 仅支持7z、zip、gzip、bzip2 和tar 格式,7za.exe 使用时不会调用其它模块。 命令行选项 7z [命令行] [[选项]…] [基本档案名称] [[参数变量]…] 7z [command] [[switch]…] [base_archive_name] [[arguments]…] [参数变量] ::= [选项] | [通配符] | [文件名] | [文件列表] [选项]::= [选项标记][选项字符][[选项]] [选项标记] ::= ?/‘ | ?-‘ [文件列表] ::= @{文件名} [arguments] ::= [switch] | [wildcard] | [filename] | [list_file] [switch]::= [switch_symbol][switch_characters][[option]] [switch_symbol] ::= ?/‘ | ?-‘ [list_file] ::= @{filename} 在方括号内的表达式(―[‖和―]‖之间的字符)是可选的。 在书名号内的表达式(―[‖和―]‖之间的字符)是必须替换的表达式(而且要去掉括号)。 表达式 expression1 | expression2 | … | expressionN 命令行及选项使用大写或小写字母都可以。 首个命令行必须是无选项的参数变量。 选项及其它文件名的输入顺序可以打乱。 带有空格的通配符或文件名必须加上引号: ―Dir\Program files\*‖ Dir\‖Program files‖\* 通配符是一个键盘字符,例如星号(*)或问号(?),当执行添加文件、释放文件、选定文件、删除文件等操作时,您可以使用它来代表一个或多个字符。当您不知道真正字符或者不想键入完整名称时,常常使用通配符代替一个或多个字符。 7-Zip 支持和Windows 相类似的通配符: ―*‖可以使用星号代替零个或多个字符。 ―?‖可以用问号代替名称中的单个字符。 7-Zip 使用的并不是系统处理通配符的默认方法,因而7-Zip 不支持其它通配符规则,在系统中*.* 相当于所有文件。而7-Zip 会将其视为任何扩展名的全部文件。所以要处理所有文件您必须使用* 通配符。 示例: *.txt

winrar压缩软件的使用方法

winrar压缩软件的使用方法 我们经常会遇到压缩文件。我们从网上下载的文件可能大部分是压缩文件,我们发送邮件的时候如果发送的附件过多通常需要压缩文件打包,给朋友通过QQ或者MSN传送东西的时候最好能压缩一下。压缩文件有三个最重要的用途: 1、捆绑文件,使多个文件捆绑在一起,管理、传送方便; 2、压缩空间,很多文件通过压缩之后体积会减少非常多,压缩之后文件会变得小了(不绝对); 3、压缩文件一般可以免遭破坏,比方说你的文件进行备份存放的时候最好压缩打包,这样一般的病毒不会破坏到它,杀毒软件也不会破坏到它; 当然压缩软件还有很多用途,比方说可以保密存储一些文件,如果在压缩的时候加上密码就可以达到这个用途了;再比如,用途就是文件分割,我们另开一篇文章讨论 https://www.wendangku.net/doc/d61844068.html,/post/rarfenge.html;还有很多用途,大家可以到网上查查,在此就不罗嗦了。 想使用压缩软件,首先请你下载压缩软件,并安装。 下面尝试简单的压缩打包和解压缩的使用方法: 1、压缩打包的方法:右键单击一个文件或者文件夹,出现下图,选择“添加到……”,开始压缩,等待一会儿之后,当前这个文件夹就会出现一个你刚才右键的那个文件或者文件夹同名的,但是图标是“添加到”三个字前面的那个图标一样的文件,就压缩文件。

2、解压缩的方法:右键单击图标为刚才一样图标的(三本书一样的图标)文件,弹出如下菜单,选择“解压缩到……”,开始解压缩,稍等就会出现和和当前文件名一样的一个文件夹,这就是解压缩后的文件。 下面简单看一下压缩文件内部的情况,双击打开一个压缩文件,会出现下图。如果点击第一个图标“添加”,意思是向当前的压缩文件内添加文件;第二个图标“解压到”,

WINRAR命令行参数整理(精)

我的实例: 将D:/wk.doc压缩为:final.rar d:/winrar/rarad:/final.rard:/wk.doc 将final.rar中的wk.doc解压到F:盘 rared:/final.rarF: 将final.rar转换成自解压文件 rarsfinal,rar(默认转换到同级目录下了 给自解压文件(.exe添加注释(设置默认解压路径等 rarc-zwk.txtd:/final.exe 直接创建自解压文件: rara-sfxd:/cc.exed:/cc.txt 用法:rar<命令;-<开关1;-<开关N;<压缩文件;<文件...; <@列表文件...;<解压路径; <命令; a添加文件到压缩文件 c添加压缩文件注释 cf添加文件注释 ch改变压缩文件参数 cw写入压缩文件注释到文件

d删除压缩文件中的文件 e解压压缩文件到当前目录 f刷新压缩文件中的文件 i[参数]=<串;在压缩文件中查找字符串 k锁定压缩文件 l[t,b]列出压缩文件[技术信息,简洁] m[f]移动到压缩文件[仅对文件] p打印文件到标准输出设备 r修复压缩文件 rc重建丢失的卷 rn重命名压缩文件 rr[N]添加数据恢复记录 rv[N]创建恢复卷 s[名字|-]转换压缩文件为自解压格式或转换回压缩文件t测试压缩文件u更新压缩文件中的文件 v[t,b]详细列出压缩文件[技术信息,简洁] x用绝对路径解压文件 <开关; -停止扫描

ac压缩或解压后清除存档属性 ad添加压缩文件名到目标路径 ag[格式]使用当前日期生成压缩文件名 ai忽略文件属性 ao添加具有压缩属性的文件 ap<格式;添加路径到压缩文件中 as同步压缩文件内容 av添加用户身份校验(仅注册版本可用 av-禁用用户身份校验c-禁用注释显示 cfg-禁用读取配置 cl名称转换为小写 cu名称转换为大写 df压缩后删除文件 dh打开共享文件 dr删除文件到回收站 ds对固实压缩文件禁用名称排序 dw档案处理后清除文件 e[+]<属性;设置文件排除和包括属性ed不添加空目录 en不添加压缩文件结束标志

WINRAR使用方法

WINRAR使用方法 修复受损的压缩文件 如果你打开一个压缩包,却发现它发生了损坏那可以启动WinRAR ,定位到这个受损压缩文件夹下,在其中选中这个文件,再选择工具栏上的修复按钮(英文版的为Repair ),确定后WinRAR 就开始修复这个文件,并会弹出修复的窗口只要选择修复的ZIP 文件包或RAR 压缩包即可 压缩后自动关机 启动资源管理器,选中文件右击,选择WinRAR 添加到压缩包命令,打开压缩包名称和参数窗口,高级标签,然后选中完成操作后关闭计算机电源复选框这样,在备份完数据后,机器会自动关闭 加密压缩重要文件 使用WinRAR ,可以加密压缩重要文件:在WinRAR 中选择文件菜单下的设置默认密码命令,然后设置密码(适当加长口令的长度),再把要加密的文件压缩起来这样就可以加密压缩一气呵成,在加密重要 文件的同时还可以压缩文件,的确是一举两得的好事 小刀说一个关于加密的法子:关于文件加密,用WINRAR进行加密:右键点击要压缩的文件选择添加到压缩文件在出现的对话框里点选常规标签,选中添加用户身份校验信息点选高级标签,点击设置密码打开带密码压缩对话框,打上你要的密码并将下面的加密文件名选中点确定就可以了 文件分割 利用WinRAR 可以轻松分割文件,而且在分割的同时还可以将文件进行压缩操作起来相当简单,只是选择一个选项即可:启动WinRAR 压缩软件,并选择好要压缩的文件(可以多选,也可以选择文件夹),然后单击工具栏上添加图标,并在弹出的窗口中单击压缩分卷大小,字节下拉列表框,从中选择或输入分割大小单击确定按钮后,WinRAR 将会按照分割大小生成分割压缩包 把WinRAR 当成文件管理器 WinRAR 是一个压缩和解压缩工具,但它也是一款相当优秀的文件管理器只要在其地址栏中键入一个文件夹,那其下的所有文件都会被显示出来,甚至连隐藏的文件和文件的扩展名也能够看见!完全可以像在 资源管理器中一样拷贝删除移动运行这些文件 生成ZIP 压缩文件 在WinRAR 中已经内置有ZIP 压缩器,只要选中文件后,点下工具栏上的添加按钮,并选择压缩包格式为ZIP 即可生成ZIP 格式的文件,免去了启动WinZIP 的麻烦 批量安装WinRAR 在一台计算机上安装WinRAR 是非常方便的,只要顺着向导一步一步地点击下一步按钮即可,但如果你必须安装WinRAR 到许多计算机(如某一机房内的所有工作站)时,屡屡的询问安装问题可能令人觉得很烦,在这种情况下你可以运行WinRAR 安装并加上参数:-s ,这样可以跳过全部的问题并使用默认 值代替 相对路径压缩文件 在WinRAR 中可以在压缩文件名和参数窗口中单击文件标签,然后选择压缩相对路径还是绝对路径甚至 不选择路径,这样用户又有了一个选择的余地了 定制WinRAR 的工具栏 在WinRAR 的工具栏上有不少的按钮,其实,也可以自由地定制它:启动WinRAR ,按下Ctrl+S 键,并在打开的设置对话框中选择常规选项卡,点击其中的按钮按钮就可以对工具栏上的按钮和选择一个文件

RAR的命令行使用方法

RAR的命令行使用方法.txt 附件: UnRaR.rar 用法: rar <命令>-<开关 1> -<开关 N> <压缩文件> <文件...> <@列表文件...> <解压路径\> <命令> a 添加文件到压缩文件 c 添加压缩文件注释 cf 添加文件注释 cw 写入压缩文件注释到文件 d 删除压缩文件中的文件 e 解压压缩文件到当前目录 f 刷新压缩文件中的文件 i[参数]=<串> 在压缩文件中查找字符串 k 锁定压缩文件 l[t,b] 列出压缩文件[技术信息,简洁] m[f] 移动到压缩文件[仅对文件] p 打印文件到标准输出设备

r 修复压缩文件 rc 重建丢失的卷 rn 重命名压缩文件 rr[N] 添加数据恢复记录 rv[N] 创建恢复卷 s[名字|-] 转换压缩文件为自解压格式或转换回压缩文件 t 测试压缩文件 u 更新压缩文件中的文件 v[t,b] 详细列出压缩文件[技术信息,简洁] x 用绝对路径解压文件 <开关> - 停止扫描 ac 压缩或解压后清除文件属性 ad 添加压缩文件名到目标路径 ag[格式] 使用当前日期生成压缩文件名 ao

添加具有压缩属性的文件 ap<格式> 添加路径到压缩文件中 as 同步压缩文件内容 av 添加用户身份校验(仅注册版本可用) av- 禁用用户身份校验 c- 禁用注释显示 cfg- 禁用读取配置 cl 名称转换为小写 cu 名称转换为大写 df 压缩后删除文件 dh 打开共享文件 ds 对固实压缩文件禁用名称排序 e<属性> 设置文件排除属性 ed 不添加空目录 en 不添加"压缩文件结束"标志

教你用压缩软件将文件压缩变小的方法

压缩软件怎么用?所谓压缩软件就是能够对文档进行压缩的工具,而压缩的目的则是降低文档占用的内存空间。在很多情况下都可以使用到压缩软件,例如当我们需要将文件上传到某平台或是发送给别人,且发现文件超出平台限制的上传内存,而出现文档上传失败等诸多情况都可以使用到。 压缩准备: 在正式对文档进行压缩前,准备好自己想要压缩的文档格式,并且由于不同压缩软件之间所支持的压缩格式等有所区别,所以还要准备好支持压缩手中格式的软件。例如想要对pdf文档进行压缩则可以使用到迅捷压缩软件等支持工具。 压缩方法: 压缩准备的思路理清后就可以使用压缩软件对文档进行压缩了,然而拿到压缩软件后工具通常会有多个压缩方式,因此我们根据自身要压缩的pdf格式选择对应的‘pdf压缩’功能,如果有压缩视频或图片等需要也可以按需选择。

接下来压缩软件会进入到所选的pdf压缩界面,此时要做的就是透过多种添加方式中的其中一种导入需要压缩的一个或多个pdf文档。 pdf文档添加好后可以在随后出现的属性栏看到文件名称及原文件大小,我们这时需要做的则是在通用设置和高效压缩中设定pdf压缩的方式。不同压缩参数所压缩的效果可能会有所区别,调整时根据需要修改即可。

最后点击右下角的开始压缩按钮对添加好的pdf文件进行压缩处理,压缩完成后属性栏的‘状态’下方会有输出完成字样,这时就表示pdf压缩完毕。而后到保存至所指位置即可查阅压缩后的pdf文档,与此同时还可以在属性栏看到pdf 压缩后大小及压缩率的相关参数。 上述就是使用压缩软件把文档压缩变小的方法,所使用的案例则是对pdf文档进行压缩,希望可以帮助到你哟!

命令行下的静态代码分析器Scan-build使用说明

Scan-build:命令行下的静态代码分析器 1. 什么是 Scan-build? Scan-build 是一个命令行工具,它能够帮助使用者运行静态分析器检查他们的代码,使其能正常的构建。 2. scan-build是怎么工作的? 当一个项目在构建中,源文件在编译时同时也被静态分析器有序的检查着。 当构建完成时,结构将会作为一个web网页的形式呈现给使用者。 3. scan-build工作时需要哪些编译环境呢? 你如何编写代码与scan-build是没有任何关系的。通过重写cc和cxx环境变量来改变你的编译环境,scan-build可以使用一个伪编译器代替原来那个可以正常构建你的项目的编译器。默认情况下,这个伪编译器使用gcc来编译你的代码,然后执行静态分析器进行代码分析。 人为的一些操作在很多情况下都会有些好的或坏的影响。请查询scan-build的帮助文档,它会告诉你在上面的情况下,如何使其正常工作。 4. 开始 scan-build命令从本质上介入到工程的构建过程中,分析整个工作。这就意味着,在工作构建过程中, scan-build通过gcc来分析已经编译了的源文件。也就是说,没有被编译的文件是不会被分析的。

5. 基本使用 scan-build的基本使用方式很简单,只需在你的命令行开头输入scan-build即可。 $ scan-build make $ scan-build xcodebuild 首先, scan-build使用make命令分析已构建的工作代码,然后scan-build使用xcodebuild命令分析已构建的工程。 下面是scan-build命令的通用格式: $ scan-build [scan-build options] [command options] scan-build 会逐个运行这些命令,其参数也是按顺序执行。例如,在make命令中传入一个 -j4 的参数,结果是一个4核的并行编译操作。 $ scan-build make –j4 在大多数情况下,构建命令完成后,scan-build是不会再处理参数。总之, scan-build应支持并行构建,而不是分布式构建。 当然我们可以用scan-build来分析具体的文件: $ scan-build gcc –c t1.c t2.c 这个命令实现对t1.c 和 t2.c 文件的分析。 其它参数 像上面所提到的,scan-build能够处理一些额外的参数。有些参数作为命令的前缀。

相关文档