Tag Archives: cmd

[Inno Setup] cmd 실행 뒤에 프로세스가 종료 안 되는 이슈

Inno Setup 툴은 윈도 애플리케이션을 패키징하는 툴이고, 스크립트 언어로 파스칼(Pascal)을 사용한다. 이 툴을 사용해서 애플리케이션을 패키징 하는 스크립트에서 애플리케이션 파일들을 복사하기 전/후에 외부 애플리케이션을 실행할 수 있다.
간단하게 스크립트 파일의 일부를 살펴보자.

 Source: {#DefaultAssetFolderName}\NLog.dll; DestDir: {app}; Flags: ignoreversion
 Filename: "{cmd}"; Parameters: "/c taskkill /f /im explorer.exe"; Flags:runhidden;
 Filename: "{cmd}"; Parameters: "/c explorer.exe & exit"; Flags:runhidden;
 Filename: "{cmd}"; Parameters: "/c taskkill /f /im explorer.exe"; Flags:runhidden;
 Filename: "{cmd}"; Parameters: "/c explorer.exe & exit"; Flags:runhidden;
 Type: filesandordirs; Name: {app}

위 소스는 다음의 과정을 거치게 된다.
1. 설치
1.1 [Files] 부분에 있는 파일들을 복사한다.
1.2 [Run] 부분을 차례로 실행한다.

2. 삭제
2.1 [UninstallRun] 부분을 차례로 실행한다.
2.2 [UninstallDelete] 부분에 있는 폴더/파일을 삭제한다.

위의 1.2와 2.1에서는 외부 애플리케이션으로 cmd를 사용하고 있다. 이 과정을 거치다 보면 설치는 되는데 cmd 프로세스가 종료되지 않는 문제와 삭제 시에 [UninstallDelete]의 과정으로 진행하지 못하는 문제가 있다.

그래서 이 경우를 해결하기 위해서 C#으로 애플리케이션을 만들어서 위의 과정을 실행시켜야 한다.

// 5초뒤에 프로세스를 종료시키는 스레드 시작 
Thread newThread = new Thread(new ThreadStart(Program.Run));

// cmd 실행 
ProcessStartInfo cmd = new ProcessStartInfo();
Process process = new Process();
cmd.FileName = @"cmd";
cmd.WindowStyle = ProcessWindowStyle.Hidden;             // cmd창이 숨겨지도록 하기
cmd.CreateNoWindow = true;                               // cmd창을 띄우지 안도록 하기

cmd.UseShellExecute = false;
cmd.RedirectStandardOutput = true;         // cmd창에서 데이터를 가져오기
cmd.RedirectStandardInput = true;          // cmd창으로 데이터 보내기
cmd.RedirectStandardError = true;          // cmd창에서 오류 내용 가져오기

process.EnableRaisingEvents = false;
process.StartInfo = cmd;

process.StandardInput.Write(@"taskkill /f /im explorer.exe" + Environment.NewLine);
process.StandardInput.Write(@"explorer.exe & exit" + Environment.NewLine);


string result = process.StandardOutput.ReadToEnd();
sb = new StringBuilder();
sb.Append("[Result Info]" + DateTime.Now + "\r\n");

// 10초 대기
process.WaitForExit(10 * 1000);

public static void Run()
    Thread.Sleep(5 *1000);

위 소스로 간단하게 cmd_exec.exe 애플리케이션을 만들었다고 가정하고, 패키징 스크립트를 수정하고 실행하면 정상으로 실행된다. 위 패키징 스크립트를 아래와 같이 변경해서 {cmd}로 수행하는 과정을 애플리케이션으로 래핑해서 실행시키면 된다.

 Source: {#DefaultAssetFolderName}\NLog.dll; DestDir: {app}; Flags: ignoreversion
 Filename: "{app}\cmd_exec.exe"; Flags: runhidden waituntilterminated
 Filename: "{app}\cmd_exec.exe"; Flags: runhidden waituntilterminated
 Type: filesandordirs; Name: {app}

cmd로 파일을 복사하는 script

윈도우에서 간혹 다량의 다른 위치에 복사를 한다든지, UNC경로로 다른 서버에 파일을 배포할 이슈가 있습니다.
그때 아래의 코드를 약간 수정해서 사용하시면 아주 쉽게 복사를 할 수 있습니다. ^^

@echo off

set date_var=%date%
set time_var=%time%
set from_file_name=C:\cmd-test\a\*.*
set to_file_base=C:\cmd-test\
set to_file_detail=\a\
set /a server_count=25
set result_file=copy_result.txt

echo ================== update start ======================= >> %result_file%
echo %date_var% %time_var% >> update_result.txt

for /l %%i in (1,1, %server_count%) do (
 call :copy %%i

echo ================== copy ended ======================= >> %result_file%
echo %date_var% %time_var% >> update_result.txt
echo ================== update ended ======================= >> %result_file%
goto :EOF

set /a rec_var=%1%
set rec_str_var=0%1%
if %rec_var% lss 10 (set rec_str_var=0%rec_var%) else (set rec_str_var=%rec_var%)
set to_full_file_name=%to_file_base%%rec_str_var%%to_file_detail%
echo %to_full_file_name%
xcopy %from_file_name% %to_full_file_name% /e /c /y /i /r /f >> %result_file%
goto :EOF

윈도 명령(Command)들

An A-Z Index of the Windows XP command line:-

ADDUSERS Add or list users to/from a CSV file

ARP Address Resolution Protocol

ASSOC Change file extension associations
ASSOCIAT One step file association
AT Schedule a command to run at a later time
ATTRIB Change file attributes

BOOTCFG Edit Windows boot settings
BROWSTAT Get domain, browser and PDC info

CACLS Change file permissions
CALL Call one batch program from another
CD Change Directory – move to a specific Folder
CHANGE Change Terminal Server Session properties
CHKDSK Check Disk – check and repair disk problems
CHKNTFS Check the NTFS file system
CHOICE Accept keyboard input to a batch file
CIPHER Encrypt or Decrypt files/folders
CleanMgr Automated cleanup of Temp files, recycle bin
CLEARMEM Clear memory leaks
CLIP Copy STDIN to the Windows clipboard.
CLS Clear the screen
CLUSTER Windows Clustering
CMD Start a new CMD shell
COLOR Change colors of the CMD window
COMP Compare the contents of two files or sets of files
COMPACT Compress files or folders on an NTFS partition
COMPRESS Compress individual files on an NTFS partition
CON2PRT Connect or disconnect a Printer
CONVERT Convert a FAT drive to NTFS.
COPY Copy one or more files to another location
CSCcmd Client-side caching (Offline Files)
CSVDE Import or Export Active Directory data

DATE Display or set the date
Dcomcnfg DCOM Configuration Utility
DEFRAG Defragment hard drive
DEL Delete one or more files
DELPROF Delete NT user profiles
DELTREE Delete a folder and all subfolders
DevCon Device Manager Command Line Utility
DIR Display a list of files and folders
DIRUSE Display disk usage
DISKCOMP Compare the contents of two floppy disks
DISKCOPY Copy the contents of one floppy disk to another
DNSSTAT DNS Statistics
DOSKEY Edit command line, recall commands, and create macros
DSADD Add user (computer, group..) to active directory
DSQUERY List items in active directory
DSMOD Modify user (computer, group..) in active directory

ECHO Display message on screen
ENDLOCAL End localisation of environment changes in a batch file
ERASE Delete one or more files
EXIT Quit the CMD shell
EXPAND Uncompress files
EXTRACT Uncompress CAB files

FC Compare two files
FDISK Disk Format and partition
FIND Search for a text string in a file
FINDSTR Search for strings in files
FOR /F Loop command: against a set of files
FOR /F Loop command: against the results of another command
FOR Loop command: all options Files, Directory, List
FORFILES Batch process multiple files
FORMAT Format a disk
FREEDISK Check free disk space (in bytes)
FSUTIL File and Volume utilities
FTP File Transfer Protocol
FTYPE Display or modify file types used in file extension associations

GLOBAL Display membership of global groups
GOTO Direct a batch program to jump to a labelled line

HELP Online Help
HFNETCHK Network Security Hotfix Checker

IF Conditionally perform a command
IFMEMBER Is the current user in an NT Workgroup

KILL Remove a program from memory

LABEL Edit a disk label
LOCAL Display membership of local groups
LOGEVENT Write text to the NT event viewer.
LOGOFF Log a user off
LOGTIME Log the date and time in a file

MAPISEND Send email from the command line
MEM Display memory usage
MD Create new folders
MKLINK Create a symbolic link (linkd)
MODE Configure a system device
MORE Display output, one screen at a time
MOUNTVOL Manage a volume mount point
MOVE Move files from one folder to another
MOVEUSER Move a user from one domain to another
MSG Send a message
MSIEXEC Microsoft Windows Installer
MSINFO Windows NT diagnostics
MSTSC Terminal Server Connection (Remote Desktop Protocol)
MV Copy in-use files

NET Manage network resources
NETDOM Domain Manager
NETSH Configure network protocols
NETSVC Command-line Service Controller
NBTSTAT Display networking statistics (NetBIOS over TCP/IP)
NETSTAT Display networking statistics (TCP/IP)
NOW Display the current Date and Time
NSLOOKUP Name server lookup
NTBACKUP Backup folders to tape
NTRIGHTS Edit user account rights

PATH Display or set a search path for executable files
PATHPING Trace route plus network latency and packet loss
PAUSE Suspend processing of a batch file and display a message
PERMS Show permissions for a user
PERFMON Performance Monitor
PING Test a network connection
POPD Restore the previous value of the current directory saved by PUSHD
PORTQRY Display the status of ports and services
PRINT Print a text file
PRNCNFG Display, configure or rename a printer
PRNMNGR Add, delete, list printers set the default printer
PROMPT Change the command prompt
PsExec Execute process remotely
PsFile Show files opened remotely
PsGetSid Display the SID of a computer or a user
PsInfo List information about a system
PsKill Kill processes by name or process ID
PsList List detailed information about processes
PsLoggedOn Who’s logged on (locally or via resource sharing)
PsLogList Event log records
PsPasswd Change account password
PsService View and control services
PsShutdown Shutdown or reboot a computer
PsSuspend Suspend processes
PUSHD Save and then change the current directory

QGREP Search file(s) for lines that match a given pattern.

RASDIAL Manage RAS connections
RASPHONE Manage RAS connections
RECOVER Recover a damaged file from a defective disk.
REG Registry: Read, Set, Export, Delete keys and values
REGEDIT Import or export registry settings
REGSVR32 Register or unregister a DLL
REGINI Change Registry Permissions
REM Record comments (remarks) in a batch file
REN Rename a file or files.
REPLACE Replace or update one file with another
RD Delete folder(s)
RDISK Create a Recovery Disk
RMTSHARE Share a folder or a printer
ROBOCOPY Robust File and Folder Copy
ROUTE Manipulate network routing tables
RUNAS Execute a program under a different user account
RUNDLL32 Run a DLL command (add/remove print connections)

SC Service Control
SCHTASKS Create or Edit Scheduled Tasks
SCLIST Display NT Services
ScriptIt Control GUI applications
SET Display, set, or remove environment variables
SETLOCAL Control the visibility of environment variables
SETX Set environment variables permanently
SHARE List or edit a file share or print share
SHIFT Shift the position of replaceable parameters in a batch file
SHORTCUT Create a windows shortcut (.LNK file)
SHOWGRPS List the NT Workgroups a user has joined
SHOWMBRS List the Users who are members of a Workgroup
SHUTDOWN Shutdown the computer
SLEEP Wait for x seconds
SOON Schedule a command to run in the near future
SORT Sort input
START Start a separate window to run a specified program or command
SU Switch User
SUBINACL Edit file and folder Permissions, Ownership and Domain
SUBST Associate a path with a drive letter
SYSTEMINFO List system configuration

TASKLIST List running applications and services
TIME Display or set the system time
TIMEOUT Delay processing of a batch file
TITLE Set the window title for a CMD.EXE session
TOUCH Change file timestamps
TRACERT Trace route to a remote host
TREE Graphical display of folder structure
TYPE Display the contents of a text file

USRSTAT List domain usernames and last login

VER Display version information
VERIFY Verify that files have been saved
VOL Display a disk label

WHERE Locate and display files in a directory tree
WHOAMI Output the current UserName and domain
WINDIFF Compare the contents of two files or sets of files
WINMSD Windows system diagnostics
WINMSDP Windows system diagnostics II
WMIC WMI Commands

XCACLS Change file permissions
XCOPY Copy files and folders

* Reference

탐색기에서 CMD를 실행시키기…

대충 아래의 코드가 필요하다..

Windows Registry Editor Version 5.00

@=”Command Prompt Here”<– 마우스 오른쪽 클릭시 나타나는 메뉴이름// 편한데로 바꿔사용하시면 됨

@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25, 00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,63,00,6d,00, 64,00,2e,00,65,00,78,00,65,00,20,00,2f,00,6b,00,20,00,74,00,69,00,74,00,6c, 00,65,00,20,00,85,ba,39,b8,20,00,04,d5,6c,b8,04,d5,b8,d2,20,00,26,00,26,00, 20,00,76,00,65,00,72,00,20,0command here.reg 0,26,00,26,00,20,00,63,00,64,00,20,00,22,00,25, 00,31,00,22,00,00,00

귀찮으시면 파일 받아서 실행만 시켜주셈..