Hiding Console Application Windows
With the simple free source code and executable application below you can launch and run multiple console applications using cmd.exe without displaying the console window. This code eliminates the need to build a service, and is a useful complement to the Distributed Scraping With Multiple Tor Circuits article for those running Tor under the Microsoft Windows operating system. It includes a batch file to enable you to run multiple Tor proxies. Other companies charge for a similar application.
Application
You can download the application hideconsole.exe here.
Code
This is the simple code. If you want to download the entire Visual Studio 2010 project or fork it please use the github project.
// hideconsole.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "windows.h" #include <string> #include <iostream> #include <stdio.h> namespace std { #ifdef _UNICODE typedef wstring tstring; #define tout std::wcout #else typedef string tstring; #define tout std::cout #endif } using namespace std; int _tmain(int argc, _TCHAR* argv[]) { if(argc == 1) { //wprintf(_T("Usage: %s <cmd> [<parameter1>..<parametern>]")); tout << "Usage: " << argv[0] << " <cmd> [<parameter1>..<parametern>]" << endl; return 0; } tstring file = argv[1]; tstring parameters; for(int i=2; i < argc; i++) { if( i != 2) parameters.append(_T(" ")); parameters.append(argv[i]); } ShellExecute(NULL, _T("open"), file.c_str(), parameters.c_str(), NULL, SW_HIDE); tout << "Running cmd = " << file << endl; tout << "Arguments = " << parameters << endl; return 0; }
Batch for Running Multiple Tor Instances
mytor.bat
@echo off echo %3% IF EXIST data\tor%3 GOTO DATASUBDIREXISTS mkdir data\tor%3 :DATASUBDIREXISTS .\hideconsole.exe c:\windows\system32\cmd.exe /k """"""c:\Program Files (x86)\tor\tor.exe""" --RunAsDaemon 1 --CookieAuthentication 0 --HashedControlPassword """" --SocksListenAddress 192.168.0.178 --ControlPort %2 --PidFile tor%3.pid --SocksPort %1 --DataDirectory data\tor%3""""
start-multiple-tor.bat
@echo off setlocal enabledelayedexpansion set /A base_socks_port=9050 set /A base_control_port=8118 set /A idx=0 IF EXIST data GOTO DATAEXISTS mkdir data :DATAEXISTS FOR /L %%i IN (1,1,80) DO ( call .\mytor !base_socks_port! !base_control_port! !idx! set /A base_socks_port+=1 set /A base_control_port+=1 set /A idx+=1 rem echo !idx! )
Note
- The multiple quotes that you see in the batch file are necessary since we are escaping quotes three times.
Resources
- CMD.EXE: Escape Characters, Delimiters and Quotes
- CMD.EXE Escape Character, Caret. OK, But What About Backslash?
Image by william