From 694f1a417ea99eeca71f1943e69414358c3f9478 Mon Sep 17 00:00:00 2001 From: driAn Date: Mon, 15 Oct 2007 22:59:08 +0000 Subject: [PATCH] wizard git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@1363 e016b1c5-ed68-44aa-a2f7-31cac88cffde --- source/src/server.cpp | 7 +- source/src/servercontroller.h | 35 +---- source/vcpp/cube.sln | 12 ++ source/vcpp/cube.suo | Bin 202240 -> 228352 bytes source/vcpp/cube.vcproj | 4 + source/wizard/src/winserviceinstaller.h | 53 +++++++ source/wizard/src/wizard.cpp | 163 +++++++++++++++++++++ source/wizard/vcpp/wizard.vcproj | 185 ++++++++++++++++++++++++ 8 files changed, 423 insertions(+), 36 deletions(-) create mode 100644 source/wizard/src/winserviceinstaller.h create mode 100644 source/wizard/src/wizard.cpp create mode 100644 source/wizard/vcpp/wizard.vcproj diff --git a/source/src/server.cpp b/source/src/server.cpp index 0c858870..b5f3a866 100644 --- a/source/src/server.cpp +++ b/source/src/server.cpp @@ -2242,8 +2242,7 @@ void fatal(char *s, char *o) { cleanupserver(); printf("fatal: %s\n", s); exit(E int main(int argc, char **argv) { int uprate = 0, maxcl = DEFAULTCLIENTS, scthreshold = -5, port = 0; - char *sdesc = "", *ip = "", *master = NULL, *passwd = "", *maprot = "", *adminpasswd = NULL, *srvmsg = NULL; - bool service = false; + char *sdesc = "", *ip = "", *master = NULL, *passwd = "", *maprot = "", *adminpasswd = NULL, *srvmsg = NULL, *service = NULL; for(int i = 1; iY+hOB^q zAi*BcwHNHVVnbb2upuD2LcZsj`-}{(`l;)0kG{Om{O6rHWzL*)W^Qg$v@@#cT=_jy zLZb`rkDk7`!qaAmVHhPR0`o&(3@t@k_d>luN!ifA+^{2|3(FWrpjY@!q2{ z@uU}aWW;@S;mcC;3gA^?;V>`X5n&kbMC^Msrll4333gr`_&#nycqmHJs!U*h#l_~r z!1opXR@3l(^DFf*1D&=sjZDTV-UwzDh>cC(*R;x`WiQJBTwvrHosE`87yOrl|C$?( zjZQ{Ks8&!J(9Io|3DwDH3YH7n68k&Cx4?f*5!uRUv9GOfL?ntZ+vp!y8=o99-k4$E zR$yk?r^Z@C_YH0IxfRw3`Be*6zDeJdu-CB}&du;+Pk3wE!)_inS# z+JYaq4K$ zC(ZnIj}J7f+Wk(Nee7P9%y@I5-Q;Q0Z)f*32Zz)*jN;O(%<`2Qv0|U2UxnjxM!>jT zR=%!0*>LFM*4LS>&6p98BVnUpSHtY0>&>D-(N}%VSiAgF<{Z24vu4qTf!1PklD+qP zEAzk#vtF&(NVHZItUN3lcEQfvW?t@Z2w4YK7gi5eAJzai9@Yrf7?uWW0%JMS;hVvl z!!pEL!ncC8hGoLqz}mvv!LnfOVI5%EupC%NST3wn8N+XMhTw^Nz;}an*EZP|(!JsP z!1}`a!TQ4nzy`tw!3M)FhZVwxz=pzx!G^;|z(&GG!SZ1Fu+gwFu(4&z8OAt>X)t@^ z-KMYGbf^N@Rj?VbnJ^Y*7W{139N1jgJlK5L0@wx^V;0L7!5`RehKAbrJ!94iWKX@q ztY%jzFc;Z9o-^a@?7`*=b5Y=tW5Z&j(bq=eE^lKDH~OLvO}9&Tnaj(T!BvfdT_|3A zuQ}bcUtDLlu~!{6YlX~K$86>8yTj27e^1Zeh8wcOL(}bQ@0#80O|Mwh&{zA|eGZ$M zwy(Zb%Px%zi8yedxw8DAkI^Gpqkq94m;Oxt1pGhwui;3=||q+ci#@HSGO|%_)IR2~iFGiHJ zPu8)b?2PnoUlVCnt1u7+%EJi2Yfxa^ z7rbNl8u9wwEMWxlSFQKW$bs*Rv0;4rD(%A#4G54-D3!(lQj%`W^${ z*1c$rrY~3#_R$!toIT|kGs0{dY&NGlBd7qgs9d9QxD1!>_ikM*(S!|UE7%30PA4{a2{P^M z&&-mlzZ|{CK3~He6_$fCjt}G{_Y6FLsFpd_ZoJ1FW?wS_jn_BNELV1>T0hM0H^b^` zm+Ufq<`g@px;elexr-fduQ_SMUUQ&1BVZmJXMec|4SL^`W=p%I#HVHLo-bFoiS-=;NNsi=^Y)-sXrb61*iEOXI~CjQ~Z|$%QZ6bFBS^+ZM)2b zL~o^rWA+NpRi1__F8$hU7#e6A8pCCiz4HvZ!V&xf68aM?6l>&RFMl?)8mTtz8&=|W)G1g<+_D=1W zVb8!oPD-j>bj~cQjS<#hp?~pUF029_V^adrRl_U);<~Na|GoKggtgl!?r&LJ%!m~@ z*D_e~xezNNw#6S_)ftP7w7~aSH3MH(@%76>x&E^CqI2fG^{evCWr8cwoZ`~TmKkHO zE5TTb0kv14S9UyBkX)|>qT0oqwe0gH=BNGiD1A!CDm ztvkp68j*LS^{zq27}JZ-H?|%xQ=Q!)c;B!%ldzvxKDdCcYZsN8@x}2it<=y!?v`}B zu#MFx+*pc$8@M>OPq(pN3OCuOinv{Tx~=te#n6v92A1@(vSaLy`DUBkOK(z*YR*{p zI~I>lyX@k6tp&%OC_AQsRm~n--o^V zKR9Epc@1O!lZ~uum`V?|xjeA({wiT@uzOk{r}gE5EA~|j!G*UUTW3x-+uB);t(n2; z@{)0{AM?+$eG{!vJ0`}gRBYv0d8Qqjhk13%SS#KxDvQCdy1gXN>gvo(_vTwQ?2<5R z=(b5#c;y+m*yAvT1!sidYI=hG)mST^vuH1_V5*rd?DP|6u6^H?Sa3KK_V6n)Bi%F} zbNqM~+%6h#RpRX4l8cgPJAAyAwC=$fW)b_$WDeG?H;lG$wF<3cA@;))tZISmlx}v> z1e6&C?ZnnAXGf=))xzqa`YSPsnoA?u4}&x7y-w-vk^(Eq4&86H#4058zbu{Z>?(9d{NboK}Fs;l}A?_uhs3D7*kIvGpn| z&(7vQ#|o^Q>=*xGmfKLSmfxIbEr6ueCBV4UIGv_XHk*?AkM}>A~h%IRwo! zlHL7E`o>eJO^b9)G0jr*69(HP2c+gr| zy{!8zRF5~})R2YlKz?Z#=hpA-+IO-4a$UEin>E#5Q_qUvBJ3$MD-hMT3N9FyHVf?5 zlgt=%t-UD0w99Nk>nv8jIhW?^-dex4wt}&-V-S zsWWX{I$q#3PWq3z_g7=(X&Zrset+A`0>k-I1 zQ!AEtdTm%LEFNasrEgkG_=RTAY2<$_@>=$0n-`W1*O;!N_>2STv-ePCs@7*_XKvW4|V2O&Y=2vzZ|oGpP$> zTsn+QCv$W&YzOPSHXpN7$tg3m_=yj#c46+TpRD5S<5rQ`lFt@@Z15O=U0lDPI^j6C z$yqC>$>rUSSsvSNC0aqVBJIT3a$MALQevlN96Mnr7(1ccF?-mt30B3v?03Ck>~;fS z3}-g%t4u>-ZdSt_f>#`3yhnI3n5MwkHg?HLvySunAoe?}r~mi&fQg@HIv1FkvC;p6 z9$?hQbG}o0c9p-j2OKIfYhJn-44r-^YZuV;@U|vASgJm+XrT zU}S9DG#D>+a~N3+ECWWyv4@QD4PiVs69(otIAU;3M(FkdHf|D(8Fzs3U^a`}!E?mm zFfs=d`wZjQA=pWHY=0P84H!EF3*&Z(IOqY$-wDje1_OCVb%rsGfsrwd4LajWcrw;_ z8jL5L2_tI^V=MB`ydFlzj2FTfw;V>sv5N01Sm7IZVnUW?GK{5O2_s8}@x2GrDi|5} zuaJ5!hQoiVU0;du6#s%TeFI}wEc01d2<+c5 zx0t7-f0XA8d>+Ph0me9H&u3p|9}SQH{Z1WA0hnTf(9yBb>@F3>IEth~vpx;Q*l3B+ zJYgfTD$vcLIbyUD;|NnpI#V9VXk)geLw6G7Rmz5D>M6!6*aw=K3>IU5?-j@yTC;qf z2#cB@_$Ie1`i@~t6lMRP1kE%{EC+hF*wtc;TPn5&-Wj8@@Z~T(6_d~yC-*ssVi50` zc`znsN5;Xj2);95W^P|`SElVRU19u@Demh7!-fU6wyl-l4d*QfV`7J3UhFK< zFs3+T8U7{ZE#VFzH$ew0##w=h&B!R;#q2O_Vjf}I=}((Ep?q=WzPIp`^O`d8ZVsMl z44zgdVjVY)cN#wvYUwP~ni4bL45gll%i0B=ABxPxD90=0z7p{N+A{c0EKvVU%hXrZfAx)(_W$B?T9t@v`(G5+ zE=n~U#LYnSOvCsZT;fN3^S8IqA8Oef>Y0`NTqxCq(X;cgBXPjw6v6wL10|W;sTi9o z#v3CM#ty|hhjHwTEnvm4mM}7&rwwdBEDJ`)^I%MH?(?7KAs*ZrwgJ`!=AN(z^hQ`u zF^=W~qzB8V!}tFgF#M}CuUm7Vb7q1FLH0>860;MTS)8sS+(&w z$;Fox_%I^coX!tFr&hSM=Wpk`jy`r&6bg8GP`jUDgxhUivsxdxfK|JnS0M!d=xP{Y z5bVz39u^6GKUkC)dmi6VbH&tIY&>)qXpZw;#n>CWLFdAE7h~t@0nHwd>2jKrG4HKh z1@w|n1k3pu;~Fy?3=LvjrhV+W{h>Lj4D_%e(7f-4ip4_rwU->RD*8W!WCxw1T|8}p z^i}els~Ce#!)1))aKSVaJA(5Grga^Y2>v^YjQfV~1^(IzXE-LDUwn~{3GHV;0Fj5s zqTl=p2xr1c!w7omtA}6wY{Ypb;eD5bDG6`)lQvi(wG#KDVQzpehOLC%2wMfa2et!t zb0F)DWPIwD|3j54h0B@V?Dv1LW3fwLlDho-f^x$0{_qT!(+N7{g?gT!wwVGr7uE#k z9$*;TO=mF?$cjz1(1Iru;?0=Ahfm+V{D&Fs0;BghrJUFLw zzGdRTM8utFAhcsM#6JC zWf}`(Alq{Wj8p9#7+C|@uP(u{?>fb?(0n{(;WUM#WHcUw{vP!UI7!z*-GCrfC%uZ^Gf63Se z=?)355Zz;2v-hyV9bkm)6)j;*Znx!$a~*0GJ(o=*iZlLUWm zgbS%+UsTAQW>^VI^^&t@dLNf?ykRf-&g{_j=kt_1ta$GTckTBZ1ATE(bjT8`6O@Z7{}b|Y@b~?U@m_ic#xdzR?ISw^<9T0pm_K+U zKZOmZcVRp+13!VWdmo3n>?AZ>=nFCGuVFUq8xQ*qdK2uN*c5o4gy(VB&dj6KUQ{_` zDL(a!#{$2(v%n8@+tMh!9B#&XrWXF`_HBjMfbbNs;V#PvF8QCwIbL=;cT?=G$l+JnJa=W0RRmH6BeEb;v*)1;pV{CK3mATsf8bBS8#8L;M6$O&Y5lYQ`uVv%lI|s#Vu|rS_B_hjyUD(iW01J9$4^E=&ft5 z`c6H2f<}j_o|(Z?zk))($z!Urk8NR@k*477MeqT=mA$BnIm({&oz*S);qt0Vc%oUu z&&vDQTaTLIW@FZ95Pymx&&22L$@SNr@Zm?V`1s`H`Xx$vzzF>Cc^y;j_$qSvr&CV8 z82h+|vrpwe>hS&G5!D=?ZYNH~kt@k z)x(P8!IeiGh!A|!kW8_bxHHI9Y72;B$%h#05**QDQ*PXhY@nwfnh z25Ec_&DrdnSR?3CXeXhxYE{1xg^fO-tpr))HmnX(+lzt5Sm>%?lfD^jt(4qc`(P$ zEEqG+hPfxqf#$fIE5<@}fid-mxp4y=a`6*dZgRQ7jJe2V++f%^SYz0DSnyc%Th^Kv zWP%_ArodRksbXw}X|U?B>0;EAVJvik7>_N4@z_~nJa#sW@pHtgz|Vw*^S+rYSOLZL3D(V5`#3Vo49y9xTXj4gEO+aV!SX7py?ZnRe-Js&E$S? z#!Om^@g*T8TZAvkhQaq1V;nyt<89H8HxK@I(jW+Ce7P8#Ym|157Gv$lK_|hF7vl-9 zgpP-wAjVdh4qX@CeZ$8%zR{}>KSOc;I@p+u4W_w*44fxcB*y)lpjp7}Vhy4BMvFH; z-)iB1XH?)@ENZ^dqG!4vg2x^dTMzw^iJOOm_G5y~xI{-hC&p%f9hx2U;+q=7cpHq} z_^9H_LB9*lb9^Ai`{pg_kK}p21W$NMtTy!L(r4s> zjPIdYy9;6*SqQLcgvb+>gJxWLvChcfs6c{LTaY>tnmARAC+q;trp^{C3*8f%1?(qA z-5r`~fG2L4;_^LlL!g%eJ?s&&Lmu{o z*z;l>Szm>2%>#+ob!XH4NgNQGhppl^rn1b?R(*9mi=c}s2+quv9J zu-U`JgL7_kgb~#;3I^&}`mnVm!7cG<_{G=2;s$6F%Ny zXn%Hw3fN%sDUhX(hUR>bD8~Jbp;^EtVhPX#1hr}Kh>w*0Tp_x7r<4E|awEr^+#?+H`85a@! zE+f+k?PIBbfM$(;6r=u5`n)^~{WWw0c#c%=CAOeh=+Gbw_W!bik)FU9u{bfVZYn`D z)fQvM@z9)TlEmsj*H>HvF=UOv>|3!5V%&ccnoV9R#{ThHB<_Ew zW1y$e^Zxx80+>v(T<9?NM5KqsIM9@cWnhiXW4Y9B#ea~Fp=54{`wW_``ni}7`Xn?9 z^KCS)KLdG9zEi*jc`|kc?vIcsDhJIIMu{;lS~}JfR~eckW?K*I0L^2&yNvyRnBWNb zRBYG7n;5tBjiK2pX<{75TS;em;2to|S%4-Us%w^y?n>R;;f7QNj8MJSP2_Jm2!1kUk~PMdWGe ze|y+@=}-)DZVQG(v&Ln`8bU`($HeLSbCik`tSZmKRF{tTFrRd)d^5z=m2M)R4wf#R zDev?J>0Fnw{X1*pGI=1Q4>U{N&%-Vk8zz>F{UfCFJaMBHH%^Q#c%}42Puvt}KQoyo zm;zlOUFZp%3(dG|J?u8IPsJKx|L4%Wtxk!tfTy83#+(;}G)ken!KYQ!_4i?;DY`bV zS%y5M(Gr>&xAw4Xv5sP#7dlCI^~Cj5++`j%NNm(k4DCN&aKcXzD;u$yVqDSAf@baJ zdEypAvnE9zb~`i+y+@3F>po~6TkMH@lySWNPYVu&eh<1C{0Cw@=tJl<_+w&_#y8N+ z36ygVPLebUMDKCn8{ z_2v0=(?~i^o_!%*y19H3*MBXw(ORDOXB+9x@<2vcXcn-$7@PG9>0$CXp)o=_Po9OI zBt2E$2Ug%{wEqG@USq%XHS#?8I_YKdK*kDa7G|Y~Z4lci#)|w6nwR8OPu%T_yOWI9 zpDUJa3fLi!%Vj(d&GeEOPjp1=RWTO&E9r0LIo+Oz=DLAPXI^Wrkj`m;h!}VK!?D4d zLB`&6VM>(k@6gF^Q0%qXMjzSo+;l1Y?kyq$D{oT7YHtr=fQsIYvo&jT`#>{zB$+p z(yQdNz}83yW1q34!{oWUOf`)E3@qmfjFOJ=uoUSA@;o>ln#VR5<07L6bRK+9 zF<#EL(o^L*EEh;GsfO#%67t~HfE=0DYA1)~Yoyo9vtw?QzDu69+b;d0haHiAPaa{$ zF=!V0W3edYZyd)4(9okv{6$mB*&XAt(3ETzEQtuYyI&rV`eox#%#XTs-R(%ATW58n`_MF%Y)wTXh zMZm)f_(Z-w*m3DI^1P3~ldggl3R{7Xe2LKA;Zw!ff_20ih$VqFmQI)VA%CN}Hd@KE z6*8sU$upDo&>V!a#h6KsSgsh5F%r5H{1~y;(Bs9f^sotJy#5mfx$Y~3&W4{Q25A&Q zv-y{Zv4BgZZ}7z3sJPW)9D>(Fv!ENrc(7HHVPh8jWCgOu)1XJgPxr8^pxFs$h(Q{&pjo>)VtBeT z7D4m8MPk$oq1kFzd*b}pDDZj@Tqd?cj0Z1;=D|0JaR!_Z&E~(+!&Zr{@vyaG8^scE z%)FrX8#fCk0dA4rDqkP$PU*kP0~x!aS>wGP_L$fqF&6d-XbwJ4iTR)(mwwjqY=5Me zu)!0)tes@r^HTsSOxSt9vcJicCHMu79KWQY^;aP^$X7Pz?;Qx@vytZws}}G z7XQpR1)dqR#&w~2Ng9axpzBCClIMJo4$a%$-%JqNXbH^|wh~K)&Xmsb#C23$ClBi< zHb9Ki>~QI^p128$n-*k#=jo?F0Si5WixpTT#*yo4>1*X#;}y`X@oKRo=;hLDJaHQo zcZ(-(eQjKSHr*ycNMjo`TVcBxTVb#CK@WRK`mj9jl7B#F!9Op?g1sR2nivcH7BoBN zJAT1N*fApX7*diJA= z&|EiE67xaFN>`HyGHODzWfBr}{dsREDj-#!ovQ(~)49azfYp^wlLs=ILi2X4IXsSr=4~}rj7>NWnrnnB#hgz=p)UiQA_i$phh||4 zJ#llOhk?x%7gxlwwvJVS1kzEhr; zX$N#C_?__1`j5@OO#!>)dENI(zb&5#c2xSbJPW-Cn(2%f^*Ly^!UeHN=u&9*9m^N& zGiX(O{)-JRr9uU%BcYjU`+f>E;-Q(6eL=>!I?zmMz98e^)Et_9rj;14ce-?Id0x&Y z(9GY+gkTTmtrG#w)YcbddC<2)W7akH!!r(VR*YAnncnaPSq12~p_$(E1sOAW6Pn4( zUh+A}_z2#){&-q8p7ug)vssUWF~bw`WM4^tE1wE>M*5sQ?o#6iX%p9s=O7D_E+@|c z&L4>lUh8N=uMZ z4-Xq8cDaX*5F6!T4Jth6DJSV5uq~DPTGTwu>;6D`0 zhCVKRL7vZu7Dg%-wnEUO{gJ9;g9q2tPO?O?WDjd7mgZqC#j?cksAu$nX6=TGvG;e7 z9wrZDj7UcQ_{`84Daa``ADZ|0XfYr3IO$3931CyC3*>q13~2h9V(k5e(2SoY25HQJ zW`!5|J@78UyTvjPumid`{7w(MS8TV3?S<}yxcfY8KXiAn17eWIVQ6OjgqYL*&k8>0 z2|Ob9iiiDE>>Uq#Pwbe7eJS>h7#A;Rpa;R9^~8m7{$*(*&~@1&R$tbvC$ z6>Bb*gkxGrxAU;}(w*dyztKgyXA0`?X50sm8TZppcBH}5L*#*sVTv0e#<^j<^h8hG zWW`Mt^C7NKdafJC_Mfl7g@TD-S4&^#27)b9+zL;eExpMTw?%PxigBQM0-F8kNl)A} z(9ZhrSwYSNr`-U|EN;tK&}^AdF~)^UM|t9+6&K@)i<7SAiL0TwTB*4H%!DV5SAfqG zn54iIF*u`vbecSnkq*rQHW%YHZX?~^6PK;Hj$+K;$kj$qc^0NOG}Cl3j*j!h=8GkO z&G{J%16v@rLUBBHrr1ic0br}4b2-s$6pVwuMS7DwS2P@q*h-sH?UHs@irsOU*}$Ir z53^Po*3w~-USo{7Jp5xyL=T{qMD4q3C{_vKcDlsLrpO|??O-azy_&iBpy*z>9L9W{IF zTB{zvx8~mlHX9MaR0pmQgLQfMx$vwhm*8We%fc@b<2o)6n(2Bm-g+y=ZWQA(ZU;1n z_1$88^x6*1JofknBd~ERG&3m{YYF|Z0uOoO9)xCk(!-t>d&$FI7JJjf-WGdb%+HLE z3-X(WtT7pX%{>!;wLMu3tQ49x2|=5=Epr}>H3<{r`jLN!fvln!&-cB~SH%;Tz(0<_ zK>lS0H{)v1O#BNCF5_QmVB%k8a2fwH16zxKiGhqAmcNfb8=hZ`B;%-=3(Y+E#}~-* zVEkhXWc|x%$Ylw00GasL78qC;#=o$@K>lR~GRE<*Fffhvu<_6=%w#d%|NPSmO#G7y zJeG{VSDtB!%Q)mN6=YXtAl`~Ne{F;r?-pamHz@9ahaD7q*ux$bJM3Z4L$iRdh&lH> zE(!BDUK3=88=~v$v?=HrIWkWOd5^D?H54tSde~=&tnjs1t zE5;Lz7n|ydn=Up>%vm2mvvzaExc2J<&DNMF#>Hn8G}A(O=aHL%iv+J$AZxW$dbNB4 z*ha3Op*74fZiK zYxt=coBpKOH)6xUPK%urO9uM@nuT`1bmHgBf_DL#epDd!d9e#(&iF4KhF-}+GlZJS z{c=hMbQv*z(Zr2QfF@4yusR{Q{)7!ZurV}QGY`uUYwcle#M+CoBDJ8I_(c({qSvP35!e#Dfa6Gt+0{bYiLZI~XM0~N{`9%TSF%sQl2KH|5VR!ns^>CnMb2k6( z1UK4+xPSDc>7}cl-}?O*_%7(b@s;@B`ZYQ^C=(M0F;<2J=eWVt4MxV1xI2ug7mSPp z_&^w|GXzG~1J)15#I8XW3LD7}^>`V_2u8w>g)vQnF)$gn2*y6Q6h_9o^ja9xN*EdM z#2aBuH^Iob94N43hvWBsO@n0G2;(lS?VXVV&bR{>yx*ML8b#yf`52y&yb<<6GyO}9 zck6Mn6JjY~C&j)IV?obCJ3rj`qaeqLQwqEw#@n(Ya%IL<@eea@0jmYgnkR}et_C#z zHVpuFhhd5c#bd zrfy<7hmWK}a`>HHKcRxbO+~yTw;<|~9 zeVqN0DG^4-I@X18h~SeT8PA&pW8%%?9@`}N245HVT5d`xiF@AFft!(K8$HGj4TDlj>2>;jEn`m4#u<=M#g%tgE8Y5JtvyEa;4n;K`Wl$6}uanZ5oIt8!yzbQ;DEelEDfxp-efvs3;c zRuBH9y*UzpZ{tX9D}vulGWdOX7A6dyneZIW@1KK@7UQ!rza!7MII%9!rADCe%OvOL z026_Et@#aj{O?SEb;Z)fco}Lz^EA!GIzzWtTo*BR&F*6T#CU8bG>;u1#9?|~Bz z5oG!K>nq7dim{VbgJ#MTqs|xOx8f-|CGwl`OjE?zY58qiuGmiLnKbh`HaIC*!x_S&^fjxc8y`g#QxcE%^*IYr?O} z<9}yfE}=mBLX1uQrPwL48erdw@mukfysv%`3&mV2X@o&Dg}dJa=Kxkl(EW-$1ER$$ z>tMD*6)}FnoF{AwOAt#I^6!FZ}PGl6d_?g4dX>jK`$^?Nbu3KRevT$E09k z*b4vglmy1F>9c?EEBfr1>9D@gOhd$|hl;sh;co#p28_4+m5O5r_U9>Zk_S$Pc6zlK z`@+@GJoq|K++xKo6XQrY9GdAyvHH-f#Qr9h40cP9`HiiDX@Iu{p|MAdC)_J`pBP8S z2cTKNLtSLi5;H9meaAjelT+=`95&Lcb5qgFhDIYVIgB z5B@}qnY<0nbX<(1;}?qiR*XaNkI70q*uRu=qgfn2Df-zZQEOj_EGmaMP z0bN0?mKaCJ5NM`&vHsAlpv%K|7h_>sK(liGo`TFI9h#Z+5@SsgpqYA$F_S)GL&O?^ z4He51VG^=t&|0VS1XW{$x^Z9V!R{)Xx3z-C+=pk+dXk>pjo>+ z#n{tVLbEV;iLv=tg!2AFx?7N)YdbX4ZZYaTV)u!4274TuCwx(i3yZg)nej0(X7ak? ze(@38uRu2cA9}_{{9o~i?dRD4XP&XyS(9P^>2wn zdc(fD2C=; z@IE0TK)d7!YMZ(0~!bLqT9k62coo2mz6YGvEuA zg@zwwx4qOxtJbTCKp4owMh2 z_V2vUK6`!%U1%NJn!J61H|6xfM>;&0a)dkv=~HKg_iakre2RKIktDCP+;`G@xw*O7 zDM{EAQ$9)9WT%_P6)lc=d`Iy_N3m_JZRI69&Eu>{9_`BqZ5gfM+vHLo9&T+267Xq>>Mc#BS@d_GXPa`f(9G2GR5J&9Ijm-ynk!GG zK%Z%se#MS(pX-fLmla1XIR&vTzJ8zvHuN9 zce;1$$dO9hpCgBMewrt|5el);f>RLOxpR6||)QqZoX6};zTn$9CWq}-;*C@-t7 zGM$G!PZP7Gs_rd}=>f@u^n~<+%!1UFpXHzZhWvGv#Z51e*Xt}B+?6+cNSU$0Z~u%2 z(iGm;jqczvohXHd@t2>|Qa-cOj^M&}o|c?)n$mm$jBm6vEVpz0Hd>doHa>)K-8Nc8 zT$6*TiOjNzyd^}rPD5#b%ID5s(8~H!Dy4q1CJUWFx8Y4YX?<(-+V^P!=BBQED1Y)g zWjS_GCM{+#a}*HLZ#I-1CV+vzUq$(M#;H7a6VDoIC| zR&n-Ln(hStcf7AP>RYArInfruiXV00bz7*K5<9!8m zThnn$Oi7Gym2m0@be?$ayS9)+FH;8H!}~VUZM?oMWn#mg*iOIYhJ2gSdP#J*#!l+p zJZuNeS#9aIEbpn1@gM1lrCGe>iGi8wEd+SbY$xcxo9Q9m;HUp zq?M+xxz!AV3^2pZa1JHfoN&%Sd#%?w;O)z`gYDP^3gM}Ba#!)UgYAig=uNvuK8L@( z(H?0R4HLqVu{Mwz&YEp2D0U*&&qe3qUW)2#rOpa_hS)#X`eP?T+#kPK4F_>OuSxUZ zBEyOI4M0m*Zb}?DAI3L_*VJGsq8HftSvJ#2DeB0f8kyG`T23{5>Hys7@z(I&%klVK z4*hN@=PbrVRxY>moIq|dmo2wmCos2!Y^<%VOKjH0-_>9X!PnlFB%6H(HuzGf`MWM* z|2%uz$JN`=(~1jrAO|jC)>8&jOWMHWcEg#X>lxIU?|8*BkEymP-2W9c_T)BO=0qlz zQVVgpv&9>i@cO&q#_r)uchh{|8gvfV&v6=BpG{f5f5XRGhhA;Rp<3$?`)loK4?pvN z*eNewi=|K9g#oVJWvj)XRPoy0wv?azH5}w9?vm{pP`{X3a$%!Q^W@=-H{WMRSUzxr z?H69U%8n)91E}0DE0nMZ2P@I=4})!PIOl%*BGKcql?&SBK2D&hgd28aokr|{w>`fP zm11`$@?bEkhon2eBV~=~T+$kN#-8)bFEWF8&@N3ubv5hjMK_l}i}1ls8>Ok8mxQ zaB6`~PKpO93uU!BIH9AMttOji>5b?}YG1YMJMh{+*jqVpj9NyoxkYkw42rGJx*e3c zd74e5(XqQQIhoRFlC%2TQ5;J1lyXj*Co9%k;W7B@BbRIujxBnLGncjT{>eUZO|`Lm zF6COvqaLz}=5ubgC!_v78*!e=@5RTzg`;RVg46wzaZ~;KHpJBh)ScGyo@4M!fqxqK zRQz<*5)S;y2E6>v=j3-nx0n1lBnd}8wgDdklR!A|R~w?Xv*D_%Tv4BfE0Llp|58E8 zv|#Ld=!;JvS*bI0((K(zbliEFXK-T zccR(pg1ev#`>l(;rYz!O`;{Gau{V{SP?m^#PC-vX{+^4yuk1r>f>&Ckl`Y=RVaFzvUFt+ zf#pL-^kfQ^$?ewzy2Pe^m34>SPuW0avKMlp%Pb65)(LtRbZOt*q%Z^eH0aVunX>Dk z-wjk55~vIb>R-xJU!{aRTM=r5?<)~j|w^PC#)xC%`pbm`2i%4FGI zSGxl)c1YP#7kg9LDHr>Lvj0>j9sB}%lFa`%3MT*#SHtg=$rQF%c0rkpB*_~)B`L^d z1|<~sLYL#&2Dzjr6iAt*uqv-1m+zIr1htX%UkH&0<=e49fAj!~HXfq2MHfjJ-Yi5H zK%S6A5_Stj=1WpKByQIMy4Xo9FKj48+>j(cgk=1;LFodKBx4i9*k7r>t&XY_aw(Cu z&w?&X;#U^k;cAzsOpfYBow+{BWHzsZE~$Tv1*5NN2H}JB^JX=a=^UVj!<9*AMylN? zWzxtkYFDBR$lRf9j53*rvC1YXlX;lzmH9`iP*?(eHguWH1#7yYY!G+4?s4h~r zMA=}l5OjI=A!UB(E1^qzM48OsCg?Jt&6x_tanwPV8Dn9*BhzzJEI!|!?dfW>4d0w@ z@1ZAobp~En%**l=b72|cC&VqObVDrOh=%SB9Xu&l!%1hu(3ZX`)LO-K01x`p5hQin ze2J!0l7x46I+3yx4!w#H)c=Ehf!ax+<7+@5QtymQyv`|0%;JL;p5M2Ky}c=LZaO@b zyHD~w=J>b!yG%#L*rKs5gZE`WN*zhw@&x6r!o;S_hzo)@sKsdH@|3LLB#2DfRERKH zeL0LW;nN_(@*uZEBvnF$$qLSdNV*piuWt=>d3L?BrO1~&~_)Q-P8W7`E~Q6ms3Is}oTT*yg?Ed09=VX~=? zL1f(TL4-;9VTh#nA#uAuL6`deTUi!zhDiD=MC|;KzZo+RnK55O1WIQt6lo*@xiC4a zEtIuVCKWbABxNX*#pogrAoWlto$joxKc9M$+6@@4MKZ<_S~N~sPq4|#rYnoyZG7r4 z)ULD&NQPXaMdHMkDO;t?4>lXRj9|60eCXq$OOoqLRM{@|){~VKf7x??_$%vaLv_{1 zgWrfD(!**itM^OjQs=YE||FFhqCR1?9H|}N4;Dxn2FbpA3br3#=lNTBl6WjW@n8U3P6&t2lzFQx!4oRe&J$IDMKKA*>?XClEyiMtFj}F61Mx=2L+^rz;o73P}!$0c2?O%7rUg);;xIYjQqPtCMZpqI9f>=_~0?&P>N@b4VrFhUWk$a^jnb+ zQzrhPSoKkww*q!9imH=@eqs?ke@&<&xvmluWn4r)qiYB*b;rg zQk-B&3M<6`(TvAC-J;dzX0nEUe*(jdrR}es@E*bEXhp{UL-dqZ{|#R5?a!go;MIRg ztTL<2N>haR<$C<>r&3@BLNA0A;4N!kGXhe8vLblxLTH8hb8D0g038IIer7d#(zoCB z{ePmHIj(;GW0aSSe$EUU`GUPc2lor)GAy~ko>sP18BV;BO)DwBQN=E-Y>(Q>9rF}) zne2$N!O-OpV2zCIVQJ%f$c%U(AK%d8^$)>7(or>(OI|j&q_>sHqQzI_J!PH2WYbFe zOqta8CG=a6pI0W&egR!N^ZgWs&*Q^?K$mnunFKxYo!-H + + diff --git a/source/wizard/src/winserviceinstaller.h b/source/wizard/src/winserviceinstaller.h new file mode 100644 index 00000000..6c337feb --- /dev/null +++ b/source/wizard/src/winserviceinstaller.h @@ -0,0 +1,53 @@ +// minimal windows service installer + +class winserviceinstaller +{ + +private: + LPCSTR name; + LPCSTR displayName; + LPCSTR path; + + SC_HANDLE scm; + +public: + winserviceinstaller(LPCSTR name, LPCSTR displayName, LPCSTR path) : name(name), displayName(displayName), path(path) + { + } + + ~winserviceinstaller() + { + CloseManager(); + } + + bool OpenManger() + { + return ((scm = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS)) != NULL); + } + + void CloseManager() + { + if(scm) CloseServiceHandle(scm); + } + + int IsInstalled() + { + if(!scm) return -1; + SC_HANDLE svc = OpenService(scm, name, SC_MANAGER_CONNECT); + bool installed = svc != NULL; + CloseServiceHandle(svc); + return installed ? 1 : 0; + } + + int Install() + { + if(!scm) return -1; + SC_HANDLE svc = CreateService(scm, name, displayName, SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, path, NULL, NULL, NULL, NULL, NULL); + if(svc == NULL) return 0; + else + { + CloseServiceHandle(svc); + return 1; + } + } +}; \ No newline at end of file diff --git a/source/wizard/src/wizard.cpp b/source/wizard/src/wizard.cpp new file mode 100644 index 00000000..d0ce42e0 --- /dev/null +++ b/source/wizard/src/wizard.cpp @@ -0,0 +1,163 @@ +// acserverwizard.cpp : Defines the entry point for the console application. +// + +#include +#include +#include +#include +#include +#include +#include + +using namespace std; + +#ifdef WIN32 + #pragma warning( disable : 4996 ) + #include + #include "winserviceinstaller.h" +#endif + +int _tmain(int argc, _TCHAR* argv[]) +{ + map args; + + cout << "AssaultCube Server Wizard" << endl << endl; + cout << "You can now specify some optional server settings. The default settings will be used if you decide to leave the fields empty. See README.html for a description of the settings." << endl << endl; + + cout << "server description:\t"; + getline(cin, args["n"]); + + cout << "max clients:\t\t"; + getline(cin, args["c"]); + + cout << "password:\t\t"; + getline(cin, args["p"]); + + cout << "admin password:\t\t"; + getline(cin, args["x"]); + + cout << "message of the day:\t"; + getline(cin, args["o"]); + + cout << "server port:\t\t"; + getline(cin, args["f"]); + + cout << "masterserver:\t\t"; + getline(cin, args["m"]); + + cout << "maprotation file:\t"; + getline(cin, args["r"]); + + cout << "score threshold:\t"; + getline(cin, args["k"]); + + cout << "upstream bandwidth:\t"; + getline(cin, args["u"]); + + cout << "ip:\t\t\t"; + getline(cin, args["i"]); + +#ifdef WIN32 + + string wsname, wsdisplayname; + cout << "win service name:\t"; + getline(cin, wsname); + + if(!wsname.empty()) + { + cout << "win service display:\t"; + getline(cin, wsdisplayname); + } + + string relpath = "bin_win32\\ac_server.exe"; + +#elif UNIX + + string relpath = "bin_unix/ac_server"; + +#endif + + string argstr; + + for(map::iterator i = args.begin(); i != args.end(); i++) + { + if((*i).second.empty()) continue; // arg value not set + else + { + argstr += " -" + (*i).first; + if((*i).second.find(" ") == string::npos) argstr += (*i).second; + else argstr += '"' + (*i).second + '"'; // escape spaces + } + } + + cout << endl << "Writing your configuration to ac_server.bat ... "; + + try + { + fstream startupScript("ac_server.bat", ios::out); + startupScript << relpath << argstr << endl << "pause" << endl; + startupScript.close(); + } + catch(...) + { + cout << "Failed!" << endl; + cin.get(); + return EXIT_FAILURE; + } + + cout << "Done" << endl << endl; + cout << "Note: You can start ac_server.bat directly the next time you want to use this configuration again." << endl << endl; + +#ifdef WIN32 + + if(!wsname.empty()) + { + if(wsdisplayname.empty()) wsdisplayname = wsname; + + cout << "Installing the AC Server as windows service ... "; + + char path[MAX_PATH]; + _getcwd(path, MAX_PATH); + strncat(path, ("\\" + relpath + " -s" + wsname + " " + argstr).c_str(), MAX_PATH); + + winserviceinstaller installer(wsname.c_str(), wsdisplayname.c_str(), path); + + int r; + if(!installer.OpenManger()) + { + cout << "Failed!" << endl; + cout << "Could not open the Service Control Manager: " << GetLastError() << endl; + installer.CloseManager(); + return EXIT_FAILURE; + } + + if((r = installer.IsInstalled()) != 0) + { + cout << "Failed!" << endl; + if(r == -1) cout << "Error accessing the Service Control Manager" << endl; + else if(r == 1) cout << "A windows service with this name (" << wsname << ")is already installed: " << GetLastError() << endl; + return EXIT_FAILURE; + } + + if((r = installer.Install()) != 1) + { + cout << "Failed!" << endl; + if(r == -1) cout << "Error accessing the Service Control Manager" << endl; + else if(r == 0) cout << "Could not create the new windows service: " << GetLastError() << endl; + return EXIT_FAILURE; + } + + cout << "Done" << endl << endl; + cout << "Note: You can now manage your AC server using services.msc and sc.exe" << endl << endl; + } + +#endif + + cout << "Press Enter to start the server now" << endl; + cin.get(); + cout << "Starting the AC server ..." << endl; + system((relpath + argstr).c_str()); + cin.get(); + + return EXIT_SUCCESS; +} diff --git a/source/wizard/vcpp/wizard.vcproj b/source/wizard/vcpp/wizard.vcproj new file mode 100644 index 00000000..f85c4508 --- /dev/null +++ b/source/wizard/vcpp/wizard.vcproj @@ -0,0 +1,185 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +