From 85734f3ed844f678a7bbb39d6ddaf5aa594ffb23 Mon Sep 17 00:00:00 2001 From: "vadim.lomshakov" Date: Fri, 23 Jun 2017 20:52:43 +0300 Subject: [PATCH] [rider]: patched runnerw.exe mediator to allow create process with new visible console (#RIDER-4160) --- bin/win/runnerw.exe | Bin 112128 -> 113152 bytes native/runner/runnerw/runnerw.cpp | 69 ++++++++++++------ native/runner/runnerw/runnerw.vcxproj | 1 + .../KillableColoredProcessHandler.java | 2 +- .../process/KillableProcessHandler.java | 6 +- .../execution/process/RunnerMediator.java | 6 +- .../execution/process/RunnerWinProcess.java | 2 +- 7 files changed, 56 insertions(+), 30 deletions(-) diff --git a/bin/win/runnerw.exe b/bin/win/runnerw.exe index 0fc194cc49b4d254586791fbf1447e6b98d76e3a..a4f4a81400b1f7d81f5c70fc90b71f0351651118 100644 GIT binary patch delta 31079 zcmd?SeOOdg_cwmdIKY4)BZ49VqN1Xr4$KS;37o3h`q$UB?=fsRWoP;;{&WddRa7)Em~;pv@Y~aOD~RPOk(-1jzQL&<#X9xuE`}f z)9;ghwa$^4AMurzKO)^IvbtLntPScr-qRZO^XKvB+!@Av-m}zZ8mhj%+0)!)FSRZ6 z-e=2NT0g>eyY+6Q`M$q2>#x>iUvrOiqq|mbj}q~n++eY0ahFuf)S+d}()wH`m$m!F zX%iU~?PV|~B{KX}q?pf(of2}}()x;X$U$@g)Zruw6H$%m*t|5mpQo04O&nN+(yY4P zQkyYMpJq2n4527BSH$m`Bb2M>hYh5FuieyZ_hTU35h#cyIm90B6YIi2o6k#;GZid7 zpZy@kC0W*gF0JqDreR+qTD%!^W~if39zsQiP6|Fm%+P5FWl$)LLUSopL7^lH@f3=s zkZL+YG76PZXdH!FC=`g0`FvO|!{2;>L0{3+T)QDVB9X~Ch;d@{=1$KAY3T}ZkBk{y ziCe8`)Hv?#fg`vKiO+~7I<)*dEGL7JLUngTZw=x~C7q&

4<*EF|vs>J!`P#l7SH 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 Nj;Cw?u>?LH{}0x5ricIl delta 30432 zcmd?SdstJ~wg976ltnVnorU z4c*litF7!xTdP*lT8+gDcKcvgYq4reTiY%RyBn=rX-m!hjg_F-bM86c`M&$#W$&?m zbB;OYd(1J%oNL7vJ#a5-aX%zsCmde)StjH9YhpxfH?}*>82?+sVue2l|4f;4xZf zSi~@H48@-!!*EmCk=`?(M9}Cx3)}4 zcLaDzxqo{F7os$)uD!%=jL@e$OcKKul$tBzM@$mR)$<ozILgy&dN}-b!Qc}kcA!I%mn#=HSO<;t62|deo81hCXF$?x$To}E%#Vaj6 zW3Qx=8|J=Jmg~bXQ~1kxV#F|nZhYc6hAGP&X#T#*GN!#*qvt=a5TYY`2#J4S%$;KQx^Yomzh@)3 zkzT=1i)q7P8-xOXp^%X0Tvsl;+ZB;d7!?yQu+DgP42&@RH1Cc8ty6t^8X~9}6>Sa& zdMmTjJf&GfpcJoo4N*ZRmvO{80(=qDh@gHxC2wFr9WO{60m(uMJ|#9{Ts61#H+haN zOVODh`xjI@u5$Ohf@VX)sZ_)C=>|C}>QJlfWMT02ys`@gI;mAZm!M0r6di&-f*>i@ z0I>A@$g!NkJB%y$UgRN+fKI~w>Afe!T_O}b`x6PnCnsVC66q074@Dw(y!%qou%2AF zPvlS`Q!`egFeZY|m|OgzCAkmJ>l}+9MDz4FIP+=9se`5=7Hb-EsGLA2y7yS%k^uO6hSiHn=E!+nW zgpto>%5<&zT((T-&|7s9htv@ej7pnD)>dn3OUXl@VwJ<;n3FBD&%_jcB4%nTQOT1f zCA7ax=c`9;CNHkQx4URtI=96)sIcnkD%j9sN9(Z)k{H>i7F{bkt1r_%Sg;RV#yVSK zUFT(4x8MASXq_8>1vxAEmob!MDVL=-*6G@rLLqmHvk=}{NF&2XLGUzLv-7%kR`s>d)}08O zAG7Oya#=$%1`65v>PILo)FD64&+A3ADuH!MM0$!VeGAg9{>M97)B`Pg@kxuWSl8`G zqY6>ZLMq3Zt-1gImI3k#$d6V1>a%4Th8z=9k`JsaDZrCDfHB)$C-A(SvC2AK5%opy z2#Ca-VQ&2mlh8)K{l24+mKBWCh6Grc5;=;1l$=ycK?)|b=l-XzB!@~y35zTx3lMZ% z&wXGi$#aIpmJ%aEWvNwGU8Nxt#ac?JU3I!s&OxoAHl5d1G5pt9#8zE{HMIt#DpH+Y z6I3?6uxj|(sZ;bcIZYVz5<3KZcGfnFqHkJLPtoX`fAd}CSC+);9i}SO!oT{5P)hMl zli!o6wDV?X*|M9oLumDUwXht;DA&C1nyiv`Lj)Z-Oxu2qeZu0 zSWMoA92(y@?g?wBOjoRTjjgcUO#5?LXJBVqp(8+w!Z0V{hMkmW8S+>a;oxCn9HvUg zb%$v;Mx5clRWnS%NWI@>`lfWXtXSamH{Qw2Ey-dcrPBB!)W^pG{HKs{I?kHW;cEn3ZRPiI+KmpX4l@WL>L)o-#vpgl{cB<`zF!-+WU9! zAyYagrX9o2|BQV}&p*mSFl8p@u9g1+oLtu8&aV;E^mt_#+l|X^e#d_&frT|}8m?vd z$5xvI$A_cn!vve27eC^EZlB}*r5>YpN3R^<47cIpvN{6F$o!yXHe2F*$jj7 z-S`Ih-uz6Y$n3Sb9{eW=UF0`8<9ttSwS0m*>euro%2%7~ZwTCuC2|BQ=*mv4`z+W2 z4`eMxrs$icvwt!#Y-e~KQc88V_MSTk6L=v>b=G(bjU8|CCWavo+lL{O+`+@BpZa0! zfxQIt>8K$KeD_a04AV$zQdCkQ!%GFRIycIVVZ`8XzJaP7rd#|{3|AKKz|dG*WsbN6 zV^BJO$=NQWPe!gN!y03~%>Ty&F3ffQYe5V`J=6IrmyiS=cwZ$IQiocsZTv}sR(@Xw z8T?pB%us%?U@N@9JcC}M!|v&P7_z{Gy73>yVk~Gh99_6kLBY!M=cr4y)`dL3)+r60 zY2vp)tZ3a&406mz(A8b5u8FsyZMFOW&KxvAl%n7c1of9RVzJh_>xJc5m3YIfqeXiI=y z0Pmv$gp>>5wnczJr2>p72JGJERs*o=n0?g(iuWA?mgyw>PEow%Ry%s_)&{qS#sBtF z;=ZF*Y3RLM6`0iWI=5;e83X86;|k@9Gnd+#x}sBvlX5uYR$=W~Cb_jCezu9RdW*3Z zDQ?J9a7n@X01d_+O4%jaUb|p#ATp+(u0P1V9Xz}cTE_C(wA%J#lri7pXq>nB53y1a z>58r7LmK_&yN6g|^e_cvb+Na&!NoBZ@TV~G7{y^F4^4v&7f~D^PU{COl+>JIXe3q- zupTvL1=%0lo0A2nt<3Zw!`#$A{0wEu4b2)}Z?1P-t(Uox8L{XdSafX`UHe;ay>+JX zAZH8-chAFo^J?z(kb*)ttOHU9{vg_oihPRJNf?u-%zmOCg>7;+v`BLY5yt3Vw9bn$ z`H}IOjaCp&#t39(xjH1Y#)^umA?9z%3SO;;hXC8hVRbZjb9U+x!dd7-U;88O)qcZM z(aQ9UGn0SResmgzI#hK=?~?OI&qodWXzZI8k!m^umO<&Px;7d02WL$KqEQrB;0%=M zS|F4o<$ClVS%_?p{%H}WZjNxol-aeluvImT7Tq=QXr3b=4;gC>4ATWCODGPeXCe$M zY$#@zC9{UDkhxgX3gKGba333Jir6d>TT;aQPgpfVOoSK;j&t)xl|DOB!>PkbOk8bE z4S>egxkA#?u|{%XqiBs-Qze&%${v;pifgz?_FZpLw4oZlC-LvtB{=R5=n^KtYrcXQwbe+aTZFK>mC-~Ap<^Eo*Pb;gB< z_&5`qP^7>+vM{`w70IPs&%ufyxfFvKUX~0fr^h5vCTN+In>TnmTglZ79@DdlQd{w8 z14*K^OmNhZ?n4%e*n>xmLt|M{zJhyqSUCG9_xZ5l3e4RcVXkoe6l`yxbK$1)=7l^X zI}4S-xy!2a!fLhZ{IziB2E}sG!&CaVDYT3=)yu*{gYO0)mV8c=7hTAhV7-f_T;K>*&>uh3ktN-+#^15Viv)ZfYkX+| z&*7GjSj8rDO(Wu2IoEgOXk2Gxk6bQddUKaXru-iVFkB@JV7N*cKslhC9%@huXqKwe z05(u+6COOM4dkUh@;ItM6p;h%v$kfzEcS84rls>=BqOf#vR=m0ls&Xa&TGYNIvMPvUy^KpVjLW@dtnuqslNZjH@LR17a0g!H?knPGrI(HM zJxOkd9?T`2DyA=495Ah45+})zVJz8RW!b)I4pSSy6q44|Rx0PJb-aXc#ogXT{>1?7 z6B2q1g*f&H+EDlsSObJTcs-cS|2o8y4G~PTAHN%Eyb^p^Doov)KBz>|r|pmKH^2qvldtE!NtZwT20!p&hXpu6@*w zEZRwElni2YMbBSEf>5LfPZps02aMKU5`>(wJFbwBZuS;>g`ukDjB&%+SGmf#Fy9w? z;<_|z=7mqZm|Teg*RlVMo6H{LLgV|eKXdW%LH*W}fxphz0cZkTr=2mk$i1o*+^eK2 z=t>=1iKigZ>9nKgeQ+pysFSc+#;&HPQKI2>77ILXkc=PC^~wEg;XyW_)#mSS7U z%ChJh_^p3JOSHZg-9_Fk1pO_#dOjaPOTI6k$Nd-|&R*uasY2OdT%^i2B>G3R%{tr5 zx(@1j4cC(nQv<&pXV5JE1vo_3)QgrBUw#?)vuaG{Mq)$71I_E~jL$B+&oR3`gU>|S zSy|0pth4Xb=89_?Mxj-ncc5dx!HqQM2Q#J+!72X-?zH(I==7f|p#!ZYC75sim&3uY z;!4yq)`L5tPG-xw$La*O52w-W2;7M7oAZ4cpW-r7*%#=Dn&-=}$IJ3}%c; zd=MpQgDr4oeYkN6o7i#Ol>`TSiMx`h>zM@SnOD;z77q*ZkK%@C<5d5_C5+HG52r<~ z<%^YA60itiIOAqzm8G8I&m&~mxr4UOQ#j(?#blbo`9a)kT3Me>$Zwq;XwH`~Mjh>( zTcB=m(a}2XFm?#%mlPqo`7@_ZD#t)yN_s6~YmCz;#s-M7mOYG%T|dbBwRN1>Pyo-- zn%qS!oN2pr<)bIMH__By;l3Sh>|6OYCW!nFa_M)%rd`bSHRPjFyq3!wGa(2%Y|-7p ztn{?j^IzRY8>io~);Ig|1G#HsV%QJ4Zpq1P9;Z*%vJ1KG$%9hg_!T|R31sfZ$}y_j zDV86|te5Z`5p<*k(&av?D5oY|f~s0|z8mtzMOYfJ5QXkOr}HG3>^zCZbcavly6DES zZrns&e|8JERM&UJO5~`uBI!I-(pB(B2%=z8aP%H~24BEp&GGxVBf3*;G?zEl&W#us z*u7!O6Q_apq_lAsb~JZ;+$iXScgjrB%Tu}Bl!y>?SoRQCN0m5aWbo^u8iKE73~;!m zRCDjA^d}1iqY=9Fd|*adO(0^h1{Gw7yi*V{|2xq93u|hgbBN8RCJ9?8{9eK1MHf3f zUct9UTy_DCE(zU-o^R%|&7nOY zAhTmuhGGwe+jUgRtsmdZ6Wrz-l%0Fe+=n|h-ghhtMUg(%`jQLAZn!2Rr)=Qa=IPep zJvA^2=>~=lyG)uRphi$I`1C`ZR@K~=Ve(E-7g9K{31Px3mh;(jW;$ohQS7hj19m7?>ul2IvxJdZa>#;)ZD3VHb1nhPeBTV_p zB8+`HCLY>Ehn*Ul;H#Hq7i0>|&*q8YTExu>jM3Me;4tEx?g%)9?B>CY`Mh|;W0E#C zq2tf!kIdeoKKqKQxnCys6GfzR-6xF{efJM8VUn!7H2oPBFPyYy5V6qaDPGp8UU5?- zCO6?FTW#8ukF=yN-Gl%al-l2?4}1x0o)|OWi5bY?Qc}k&NzZWE-cENz8Aea^lHYw5 z1}qm>mQ66=x!B=`z;X!(gt8JThKgAJ+=bL*^!_9l`?B+pURKfw`KL#Oo+S>G4;AYy zb=T)8)tcHayEKPijN?9?7_1KH3#vR}$6)X;V-8)sDYSlXO&&EAX99RXsqJ_NBfFH% zi(MHVra&u3ncO6Y$zP_hS99{`R?sO0_0zRLwzKSK#ED56!Lna2VbKZ^y(gswdxrkQc4b!VIWiY5G&LO&q#Z?F-8N8f8f7R9y zp;cGS-wF2MGhse!t={$3T$H}oWa`dUL->1`m#$_9YwBi@BFt|X?5YDr^e_}d%3#EU z?-B-nmSGDqN{Mkllo)8M$9cDl)!Z)qs1V->q5Wv7C$+Se-;Q@7&ffEDxo`C$w60yF zLbHo^c1)I_%%_lWQJ8`$G~OMGu&_-y>KT*?G`o%fJH%j!2BsVI;J}k4Yeah$^vD|p zVG06L&^XuudIv?L2N6x2Mi6c;BhuM6p_Hl0Y7*?MW9z#OS zwUKu~IohWLlVMKJ?UIf2r$-H4mNdJo&ad;Zp5NDilw92Cwhtj=x9=LF{2+v3+07b? zF{a_U;&h9G1o`Woq#UTHlaw2-EV64eWRBB%G|#n5l#LD5^D|^jUuG|rW&QH(@9q|P zjkV6)l(@8BY8CIwJj5NII)J=y)BAH|c9-@o)k&0YR1Rr%I^PF+!dGJlmOT{8amd|y z4R&=Ql4TXUo9&^PDB5XYAsz3eU2-c zz6uU++jJ>gzzt0w!Ui3gl0KAWyBv8bqZcc3jN-V=;TkLhOsn7C*1hmY#)fCEgn7d3!vaRI*I>d`=^l!+ky@jm_W&&&>An!qC()y|A|U z-CX(1B#~ticXj5be&R)1#v3#MG#n%c#eqhHCNARgXN~u|GW zX0PP4p#xVE`J zvi-Sl=3QY&aqrJx<-IceN%4-KkBnR}fDH&8O&vA)^RWY;q}6c?7oHD4hoQ=FtdXA| zt7iGT@Bo|raT4>W8!JEMO5v-y=N1KcMGkn9^Awl2XrSi~=$EzOv}7;0dr>fZh&!=p zP_IKt%)_xGSff8*74}42$vs#!f*s5aSUdySezB*S-Ev1UGO8 z4auWuMQiRnvvqXLK94G$hN|}yL&f!5(!21p_namPx|~C*no{Fj3OLdx_Ia`loEr=| zXo_2?pK525_coy^&T7b(Qq1K; z(2eIEMA6`@_2dUWYIMq>?a zN1H;37uLE(;r|{dS{Bbv<21`g1%ZRtf{*rzDez761l%=R*0t%=VY)Uhi|9)kbZype zECD2dx4U?=odtn({!Q+}vc+sV7qz^RUB`7@Q8e-(HaIvXt^Akx<^+}=Sy{512yUPtZis7zdsLZSPk(&Yj=Z2yJ(9`_#a0h`UDle;Yn`IhqYSGC z9f;5CCwT6SB{z+ea@jP#0TQm3DCnGwOJ9d07S|o{^e43Js zI&oZo(?RT9Gw0N%^SB0?@u2p$-;)EdSq&b zt_pUw_W?m!anB$W07bPjD!2A`cRU|dh>@iGpKoZdz$?e~m=Z(SOIqdxO#r_J4!1!~ z(FYV=jHp8)jQ)Gb;83&?cOT`=s@+R`3`;e?CZb_bo1P zRe0ev*nOArzk}mzZm-PQwI{Y5Chw3A!;XLk4EsJ(dq==E3i=|5tDqVNSX)CnjT8Eb zK%jOLuKXp2A~H(9!$_T0VjqlC7*LpT7|vikOp35cryGdJzoBQCVOd%GDAHk?+-VmQ zzYoKN4D=?Oe_E;X+sUU3>ryqk~8=HKb$0pe8})Hr5!x$32z5 za1(a29$xwhlBL%&HKCLVb`&?94Brh+CYJ&ej#u@L?ykn-=9q70xfRoUsro?z_gyfV zxEFwoA9aZG+bRFacRS~QuXFyj4CVK`1c}c1&vxfp*N1b7Muoe%g|4%?SB;_AHclEd zy#ylJ$2#TBekM6@?L9BCF0J`v|0>+Cjb zH>;9`yYjYK}!<* zInVWxK^Qfo#}qylx0+cU%NMqnlAl{2;GRR0W4PS)qe8Owbt+2VQ4~W0ZEteN)(>ZU zaNn)J(5n$%7*?O9R8K0blVsItQ`+`(XA9Sg8WT88QH=zhH2Q0ld$~W0B85+aTKBeB za#0)PY0x}=B8rAd?UK>_gJ5AY_y8DN>`@*V1MC#AfL<{CbUALVo0DDZ3iEkL#$l4~ z=Y%_Ze9mx_%B|TT_oH&pp*c^>7L=j5As&N2klYQlS!Kpu;WyeQx{9kt30e6II6%34Tug``9s_ z-0ejm{mI=PvNXRO)W?}+CmM%^R*?*qE2l?AGS|->?1}8wE`kXeV^;k)mvr0A&tB3E z9z!{Np1qvQNV5i)kT(AxZs&T^fS?Zj5$*%s z`AP5sTsMxc`#`+7>)bcG5OfvX+f}gS$%yrWjycbdh88OM4n0oAaHBSc3a-QT=4WmM zUFCeZ-PuFzZgj8p%oshO5`?lIBy-z0Mhnx{m-}X;B>HJXMz{+2@21X6hXTa(@X~R8 zHifu`NVuxv$HB6=8u8C^XCoxe4{0+5bAP4*S_q5(^qK`XmcJf6#LjVU_nq&5tls)V zSR)sVUGeh#Hx?fgG*3%6G*J76QKnF?gy%lo6r3Z>v$<`psk`jLNy?VAsp}!O*(+C+ zd4i&w*l2sU&@g_0vt7>mgg1#p(oYwmS^w`hqz&(LQKh{^p*n7S=}1wyj(f2*dJuNL zTC?51mj6Yt$tL$2#>w)fmkvc_55KP98cO?4!>PlV>AbKJAA*uQaEmKpdi;;2Q*9_IdK8HI4j z<{%ttm7C-7T)jC)Sgnopp3)m`xhFjD7AbdXvmyeGLQ}e0#Wi(WUo1YyIJ2XRPswzI z@E%Fh1Oo~ zcFO6;y=EOb1Og9}B@wJKEQ9YRMIT`WThSp{;1K>890}KM*lGxWh@ z*%pEvo3^b$?uXkV{Qg>U>n2WGPTrqWa8da>L2y9tP5*5}L|n-Bz>p4m07uq(_H3KG z`P;;$7o<2+h)Xc|Q@59*jGNm>;OV(TN*miVo%y0fSd;YqVH3?!8aHFdNT`lw2i=3b zy(0|I`W-8MKiW!{31mCWEmCr2$8j@}w2ylO&oMh!bVI?IK~KSvIkhtt+^)M~*sr;y zU20att=}~Yj^um0`h;Lb_#79fn483|-NM`wT$XwVp8@#tUmm%$>jf5qvuss(+3Z#^ z8?BySp}_Oi3L8H9iF$PyyMdeaYL;M`=)IC}oT=UP2Al~f-J2Fk^XtwDqlIsQdi%g9 z=$4V5#y{H4{q(8^U!Dy5+YlCz`r0YB8@U_3aa!D)e}MDfGoTy%!YA>hJ$ClQ5z*`a zW<|}f9QpN)dX{x?r}nN9)sN-mZ!Wzo3((pDq`YTMmuoHop}tIyIK7dTTj*;7G5xi&!tx0=xMF8|OXiF!$zx z5krO@#H!2{%~Z9TJkF4>+w7ah2M`mSC1=Rxb+|QFa}N)ch(rgEtg9NpvUNxBB_fM{ zeD}^)b{Y5l!2s+9n+^{4!Q@)&umqe7U_N*1;4JcHs|ShRK72%5?ZLW-?t=2dK5jP|t2V`|mFzQiiWUWv3$^Si$87h~ ztehxZOYL?-g%frP;8JjWXx|FA@{hk`qaGxD`+@N{w>>ub)wxj=wZey|GhB0|x$Vzq z*^L;i<^XeBJ6?S09z4x}VJKSH&KS9X_vuilc|VNZ&&_#1Hn?K}3%3AeB|J8d483EG z7(X3~I&%2^`7GW$Tqd3e+a zS`AV-q=7h9qegd=&xXfzmNI&z^FQLfNtQ6SmT@WgJ;nj<=;1-WeNa?~kq9LtarbZx z`z9B9L@^9wMRxcdj9i(H*JIc5b+L-UGSGaNjSbAu^VwYCk(XeA{x~wg@65}BU%ym$ zM~W{X%8Gp7W_};x%WjuP-btA!Rt_Z33!I<_u*)E1~>P^ zeb7|5V*_AAB90BhbMmn;aPp4HroD=lim%D&0~zCFRjqMCQ9g@bA<$h9TnqdrNhRFw znEcZDJ7}M^b+gWa<0GZx#~crRO17fuakIUQqvAs7M#wmXPvssRi_;>^PyYmiDag{v zHrg$syN)gp2&BuPcIgHP3z2YbfMa&%yrtnD$?X`_e|dR}w0E znA`;$d9t~nOQ6H3;VZeVA4NzouR=0+`lIIpC~JS~S!_z!ny@c9cclTRmK2hD;jZn` zDQJ>)tgp&V>Eit0~V6!Rc@19 z9IKO~RJr9GnBlDcMJG$Ga$DdMTI}R#Rc;0sXS$P4t_GfCxU zJismZICQ*=|M(-Jdt#Maq>Izy~{ zADKwXQh9t~5_m=iotSiHB^$<_Iul5a9W)uAEC$l=P`w-h;ZfXAXNI!fxgPeFST!5$ zlVBz;+rLEk?X!zT(g~c;ClLg3pNt?de6kQpmp_RO%poOvGaH(T8#BJ!=_iIEq&5_b zGodzy%zUjD;>T*&MgJWu2|7%lq~Ws85fCA)?R|7m>Qg1^d_uHr12(Wm+O|YeS zO+nJUn=3-a^KBcQDOHELx#t5!MZ38C^XFmP6YI3>WUi<#Ua<@(X|FC_mU`z2fqIMX z9DcDe$ebg=%JXV&6;8na$_hfY#qECHuKIehM01N;-z$ z#EJCQlKt3b;fR(@gG8CQM868wudJjT-`jPm!%t+76n-DnMbz>V_u7xYc70kJSMgI= zrO5kP)Ea2q7M6oBh zMZa9}IX52)t!l+}zR4?%KgK2h`#jm>X15x=p!929gpR-1Itse+_txobDCcO+1}FR8 zIQB*E?R!hW_q|X0qY<9D_opCy>OLLo|9w9hPx-HV@cjH&DV|*(e8Z}beE%SiWfybP z9;UBit96z{>;y!(pJbubc!ZqWM={);9S_eCG6TkO;axtlN&TV7! z=k&GcD^QzNL$O9R^i4WjFcULgr8Q14Yl;qVQ`@4#pdNU&FFE7$-gJrUZV?}yG@Y^N zB*fyMyoSibv%bczH%BBFaQ%N%x`$Gg zdT#b_BcXs>ev{+NyR*L;{)dBO7Ucf+yV`YZIVPy@x4+Xtx&8OW;d<1AepRG$`YTyJjW=*wID$gaA#GLF4KEDLt{m#IPzjKGVqkoR= zTZHy3@`rM6)r_9Y0tEn>&9QMO-1Y%liMaknn)JyO$6=x)}{MLwCI5w8-w`$9Zo1mjHq5BTr+uCx6iVf%>=t+Vy@WOX9# zI@>%?HezZ=JDl}TJG;my{geAXpERH`pMC=41?S|pn*jyYp1g~z+vevM`S=Bp@O_`` z286wH5I#v4;?0;1KX3iIPM~OaLXY0|8)lxjI8>=AP+>PxUW=FpB z!cUaD)ONjKdjEFg%@M?_y& zf6SUgq`c`Fa5)rq1o1B;V8vM5n%&NrO*XSHI$yQk_NgyB40_V)%MKh-g);AoS-j)Z zHSMQ*-?XIOa)s}uqy-u*3SGWPFiu_mihW%>_=eH+!&S z;%cbm8*qBTvs3tzGh9#Mv(E5Q3V$esZ_(<5C`#|=#||9mEFGS5H-0{jPIb%xq~F#( zxZRIVy>xf|k!^t=J4@8C{`e<;tb`RYn`{?*vU5b`rM40NY!+duKf5ffycCw=H`Ww- zqp3N#@dgalIk&Yw#OZ#!@wQuKsVyLYm9mw#u>tJI-4b!ThOhd%rStP_-FvZtqBhnR z(TiP$^w)Z^Q`zaZUwW~6Q4?d+_GY<|3KWj=UYgXLg6p0ezuf90l>buXZMTY2TWfFD zKa@n8(dwtEYoQg?s%8O?hX=BmU0CVyb$wZu?OCx2ey~JqZVM^6*X&{S`gHdu+xB2~ zEL(BBF_=vhdB6-f1{F(f{ra<+eY7yM&fh=n#rV)a4kCd=3Ma<4tv}n0M!yuwp6~y^ z{6NZ<6UItCwmy99xPN!naa$OBkqyB%!5CwO+a-zlPTTF^@cTZI;_wSFf$axvMFZIb z?7`y^;jE5b`oaCjj+&}%n99czyw{;W{CxYaq3JPx>EC!aN5HDPnLz8ba7o!{FY9J0 z{4`lTzXn;Y6WS44Mum8lqmUCQq(g2(3zDW#l70u0Ubi(3Vgm~=+E}I$^b6=QsCxy= zgo7eMYETMj8fYHK2znW`6ZAIdH0Uc34{8Giy~;8%plKijr~p&}It;1@eGO^@b^ja7 z3;@ah#uhRu2+RO20<8gU1icPA2D%J-2ok-$1vCq^ z43rPr2-*pvzc_pZPk;X&pd}Fg#thIhKY?_!w9I}68-5R{g6r>OftE45xg{|nvu!UA zVFzWY=jP=lgsSJRTD&>|AGI*d3x(g|h zoK>slz8Jb<;R~V57Oq%qG*Hjzce(U~-TAARH#tX-u?>u514dSl(J}>pDPUp#{DpbW zb};pdB<2<<5Fe0Fi#fh1lJ#Q?4N5F?PywhEv=dYbss^0`)q@&9ji5WARuKJDB<(

~|NT0vgwBqkCx4O9Ty4{89lfP6Km43q=f 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 BC`SMQ diff --git a/native/runner/runnerw/runnerw.cpp b/native/runner/runnerw/runnerw.cpp index d5a59f40ba52..e277101ed310 100644 --- a/native/runner/runnerw/runnerw.cpp +++ b/native/runner/runnerw/runnerw.cpp @@ -5,10 +5,12 @@ #include void PrintUsage() { - printf("Usage: runnerw.exe \n"); - printf("where is an executable file and are its arguments.\n"); + printf("Usage: runnerw.exe [/C] app [args]\n"); + printf("app [args] Specifies executable file, arguments.\n"); + printf("/C Creates a child process with new visible console.\n"); printf("\n"); - printf("Creates a child process with inherited input, output, and error streams.\n"); + printf("If '/C' option is specified, creates a child process with inherited input, output, and error streams.\n"); + printf("If not, creates a child with a new visible console and attaches to this console.\n"); printf("The input stream is scanned for the presence of the 2-char control sequences:\n"); printf(" ENQ(5) and ETX(3) => a CTRL+BREAK signal is sent to the child process;\n"); printf(" ENQ(5) and ENQ(5) => a CTRL+C signal is sent to the child process.\n"); @@ -151,11 +153,6 @@ BOOL attachChildConsole(PROCESS_INFORMATION const &childProcessInfo) { if (AttachConsole(childProcessInfo.dwProcessId)) { return TRUE; } - // ERROR_GEN_FAILURE means "the specified process does not exist" - // Seems it also means that the console hasn't been fully initialized. - if (GetLastError() != ERROR_GEN_FAILURE) { - break; - } } ErrorMessage("AttachConsole"); return FALSE; @@ -166,11 +163,23 @@ int main(int argc, char * argv[]) { PrintUsage(); } - std::string app(argv[1]); + std::string app(""); std::string args(""); - + BOOL createConsoleFlag = FALSE; for (int i = 1; i < argc; i++) { - if (i>1) { + if (i == 1) { + std::string flag(argv[1]); + if (flag == "/C" || flag == "/c") { + createConsoleFlag = TRUE; + if (argc < 3) { + PrintUsage(); + } + app = argv[2]; + continue; + } + app = argv[1]; + } + if (args.length() > 0) { args += " "; } if (strchr(argv[i], ' ')) { @@ -195,7 +204,9 @@ int main(int argc, char * argv[]) { sa.lpSecurityDescriptor = NULL; sa.nLength = sizeof(SECURITY_ATTRIBUTES); - sa.bInheritHandle = true; + + BOOL inheritHandles = !createConsoleFlag; + sa.bInheritHandle = inheritHandles; if (!CreatePipe(&newstdin, &write_stdin, &sa, 0)) { ErrorMessage("CreatePipe"); @@ -204,11 +215,24 @@ int main(int argc, char * argv[]) { GetStartupInfo(&si); - si.dwFlags = STARTF_USESTDHANDLES; - si.wShowWindow = SW_HIDE; - si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE); - si.hStdError = GetStdHandle(STD_ERROR_HANDLE); - si.hStdInput = newstdin; + DWORD processFlag = CREATE_DEFAULT_ERROR_MODE; + BOOL hasConsoleWindow = GetConsoleWindow() != NULL; + if (hasConsoleWindow && !createConsoleFlag) { + processFlag |= CREATE_NO_WINDOW; + } + + if (createConsoleFlag) + { + processFlag |= CREATE_NEW_CONSOLE; + } + + if (inheritHandles) { + si.dwFlags = STARTF_USESTDHANDLES; + si.wShowWindow = SW_HIDE; + si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE); + si.hStdError = GetStdHandle(STD_ERROR_HANDLE); + si.hStdInput = newstdin; + } if (hasEnding(app, std::string(".bat"))) { // in MSDN it is said to do so, but actually that doesn't work @@ -230,10 +254,9 @@ int main(int argc, char * argv[]) { char* c_args = new char[args.size() + 1]; strcpy(c_args, args.c_str()); - DWORD processFlag = CREATE_DEFAULT_ERROR_MODE; - BOOL hasConsoleWindow = GetConsoleWindow() != NULL; - if (hasConsoleWindow) { - processFlag |= CREATE_NO_WINDOW; + if (createConsoleFlag) + { + si.lpTitle = c_args; } if (!SetConsoleCtrlHandler(NULL, FALSE)) { @@ -244,7 +267,7 @@ int main(int argc, char * argv[]) { c_args, NULL, NULL, - TRUE, + inheritHandles, processFlag, NULL, NULL, @@ -255,7 +278,7 @@ int main(int argc, char * argv[]) { CloseHandle(write_stdin); exit(0); } - if (hasConsoleWindow) { + if (hasConsoleWindow || createConsoleFlag) { attachChildConsole(pi); } if (!SetConsoleCtrlHandler((PHANDLER_ROUTINE)CtrlHandler, TRUE)) { diff --git a/native/runner/runnerw/runnerw.vcxproj b/native/runner/runnerw/runnerw.vcxproj index 766404cf8631..13553072edc4 100644 --- a/native/runner/runnerw/runnerw.vcxproj +++ b/native/runner/runnerw/runnerw.vcxproj @@ -18,6 +18,7 @@ Application true + v140_xp Application diff --git a/platform/platform-impl/src/com/intellij/execution/process/KillableColoredProcessHandler.java b/platform/platform-impl/src/com/intellij/execution/process/KillableColoredProcessHandler.java index 68d8556b2e22..af2b3bd7bc4a 100644 --- a/platform/platform-impl/src/com/intellij/execution/process/KillableColoredProcessHandler.java +++ b/platform/platform-impl/src/com/intellij/execution/process/KillableColoredProcessHandler.java @@ -35,7 +35,7 @@ public class KillableColoredProcessHandler extends ColoredProcessHandler impleme * Starts a process with a {@link RunnerMediator mediator} when {@code withMediator} is set to {@code true} and the platform is Windows. */ public KillableColoredProcessHandler(@NotNull GeneralCommandLine commandLine, boolean withMediator) throws ExecutionException { - super(mediate(commandLine, withMediator)); + super(mediate(commandLine, withMediator, false)); setShouldKillProcessSoftly(true); } diff --git a/platform/platform-impl/src/com/intellij/execution/process/KillableProcessHandler.java b/platform/platform-impl/src/com/intellij/execution/process/KillableProcessHandler.java index 6df11cfe8e05..d79ed39f2641 100644 --- a/platform/platform-impl/src/com/intellij/execution/process/KillableProcessHandler.java +++ b/platform/platform-impl/src/com/intellij/execution/process/KillableProcessHandler.java @@ -49,7 +49,7 @@ public class KillableProcessHandler extends OSProcessHandler implements Killable * Starts a process with a {@link RunnerMediator mediator} when {@code withMediator} is set to {@code true} and the platform is Windows. */ public KillableProcessHandler(@NotNull GeneralCommandLine commandLine, boolean withMediator) throws ExecutionException { - this(mediate(commandLine, withMediator)); + this(mediate(commandLine, withMediator, false)); } /** @@ -69,9 +69,9 @@ public class KillableProcessHandler extends OSProcessHandler implements Killable } @NotNull - protected static GeneralCommandLine mediate(@NotNull GeneralCommandLine commandLine, boolean withMediator) { + protected static GeneralCommandLine mediate(@NotNull GeneralCommandLine commandLine, boolean withMediator, boolean showConsole) { if (withMediator && SystemInfo.isWindows && MEDIATOR_KEY.get(commandLine) == null) { - boolean mediatorInjected = RunnerMediator.injectRunnerCommand(commandLine); + boolean mediatorInjected = RunnerMediator.injectRunnerCommand(commandLine, showConsole); MEDIATOR_KEY.set(commandLine, mediatorInjected); } return commandLine; diff --git a/platform/platform-impl/src/com/intellij/execution/process/RunnerMediator.java b/platform/platform-impl/src/com/intellij/execution/process/RunnerMediator.java index bed914c41a74..7e8bae188c69 100644 --- a/platform/platform-impl/src/com/intellij/execution/process/RunnerMediator.java +++ b/platform/platform-impl/src/com/intellij/execution/process/RunnerMediator.java @@ -75,7 +75,7 @@ public class RunnerMediator { public ProcessHandler createProcess(@NotNull final GeneralCommandLine commandLine, final boolean useSoftKill) throws ExecutionException { if (SystemInfo.isWindows) { - injectRunnerCommand(commandLine); + injectRunnerCommand(commandLine, false); } return new CustomDestroyProcessHandler(commandLine, useSoftKill); @@ -104,10 +104,12 @@ public class RunnerMediator { return null; } - static boolean injectRunnerCommand(@NotNull GeneralCommandLine commandLine) { + static boolean injectRunnerCommand(@NotNull GeneralCommandLine commandLine, boolean showConsole) { final String path = getRunnerPath(); if (path != null) { commandLine.getParametersList().addAt(0, commandLine.getExePath()); + if (showConsole) + commandLine.getParametersList().addAt(0, "/C"); commandLine.setExePath(path); return true; } diff --git a/platform/platform-impl/src/com/intellij/execution/process/RunnerWinProcess.java b/platform/platform-impl/src/com/intellij/execution/process/RunnerWinProcess.java index 30910579ad0a..0c5f1260b881 100644 --- a/platform/platform-impl/src/com/intellij/execution/process/RunnerWinProcess.java +++ b/platform/platform-impl/src/com/intellij/execution/process/RunnerWinProcess.java @@ -41,7 +41,7 @@ public class RunnerWinProcess extends ProcessWrapper { if (!SystemInfo.isWindows) { throw new RuntimeException("RunnerWinProcess works on Windows only!"); } - boolean success = RunnerMediator.injectRunnerCommand(commandLine); + boolean success = RunnerMediator.injectRunnerCommand(commandLine, false); Process process = commandLine.createProcess(); return success ? new RunnerWinProcess(process) : process; }