#!/usr/bin/perl -- use strict; use warnings; use Data::Dump qw/ dd /; Main( @ARGV ); exit( 0 ); sub Main { @_ or return print Usage(); for my $inf( @_ ){ Snack::Attack( $inf ); } } ## end sub Main sub Usage { print <<"__USAGE__"; $0 $0 foo.pl $0 foo.pl bar.pl baz.pl ... makes foo.exe bar.exe baz.exe ... __USAGE__ } ## end sub Usage BEGIN { package Snack; $INC{'Snack.pm'} = __FILE__; use Config(); use Proc::Background; use File::HomeDir; use Data::Dump qw/ dd /; use File::Which qw( which ); use Capture::Tiny qw/ capture /; use List::AllUtils qw( uniq ); use File::Find::Rule qw/ rule find /; use Storable qw/ retrieve /; use Path::Tiny qw/ path /; our $MY_DATA = File::HomeDir->my_data; #~ our $MY_DATA = Cwd::cwd(); our $PP = which('pp') or die "pp not installed "; our $WXPAR = which('wxpar') or die "wxpar not installed "; our $SCANDEPS = which('scandeps') or die "scandeps not installed "; our $OBJDUMP = which('objdump') ; our $PARL = which('parl') ; our $EXE_UPDATE= which('exe_update') || which('exe_update.pl'); our $CACHEFILE = "$MY_DATA/par-pp-CACHEFILE.dat"; our @EXCLUDE_CONFIG_LIBS = map { "$_.$Config::Config{so}" } $Config::Config{libs} =~ m{-l(\S+)}g ; our @INCLUDE_PERL_LIBS ; our @EXCLUDE_PARL_LIBS ; ## https://en.wikipedia.org/wiki/$PATH our @PATH = uniq( File::Spec->curdir, File::Spec->path, grep { -e $_ } $Config::Config{installsitebin}, $Config::Config{installvendorbin}, $Config::Config{installbin} ); #~ } sub new { my( $class, %args ) = @_; my $self = bless { MY_DATA => $MY_DATA, PP => $PP, WXPAR => $WXPAR, SCANDEPS => $SCANDEPS, OBJDUMP => $OBJDUMP, REFLESSINC => [ grep { !ref$_ } @INC ], PATH => [ @PATH ], %args }, $class; undef %args; my $infile = $self->{infile} or die "need infile"; my $outfile = $infile ; $outfile =~ s/\.(?:plx|pl|plw|pm|pod|t|txt)//i; $outfile .= $Config::Config{exe_ext} if $Config::Config{exe_ext}; $self->{outfile} ||= $outfile; $self->{CACHEFILE} = $CACHEFILE ; ## it is shared @EXCLUDE_PARL_LIBS or @EXCLUDE_PARL_LIBS = $self->dll_linked( [ $PARL ] ); ## should be global ... and filtered on %windir% and/or $^X @INCLUDE_PERL_LIBS or @INCLUDE_PERL_LIBS = $self->dll_linked( [ $^X ] ); ## should be global ... and filtered on %windir% and/or $^X $self->{EXCLUDE_CONFIG_LIBS} ||= [ @EXCLUDE_CONFIG_LIBS ]; $self->{INCLUDE_PERL_LIBS} ||= [ @INCLUDE_PERL_LIBS ]; $self->{EXCLUDE_PARL_LIBS} ||= [ @EXCLUDE_PARL_LIBS ]; return $self; } ## end sub new #~ sub exists { #~ sub dll_cached { sub dll_get_fullpath { my( $self, $key ) = @_; my $short = lc path( $key )->basename; ## yuck return $self->{dll_paths}{ $short }; } #~ sub add_dll { sub dll_add_path { my( $self, $key, $fullpath ) = @_; $fullpath ||= $key; my $short = lc path( $key )->basename; my $full = "".path( $fullpath )->realpath; ## should be real warn "dll_add_path( $short )( $full ) "; $self->{dll_paths}{ $short } ||= $full; ## PUSH!?!?! { md5sum }{ filepath }++ return; } sub dll_linked_already { my( $self, $file ) = @_; #~ warn "@_ "; my $duh = $self->{dll_linked_already}{ "".path( $file)->realpath }++; return $duh; } ## end sub dll_linked_already #~ sub linked_dlls { sub dll_linked { ## TODO stuff my $self = shift; my $filesref = shift; my $depth = shift || 0; if( $depth > 0 ){ warn "UHOH depth $depth " } my @files = grep { ! $self->dll_linked_already($_) } @$filesref; $depth == 0 and not(@files) and die "UH OH empty $filesref ", Data::Dump::pp( $filesref ), " "; @files or warn("no eligible files at depth $depth in " , Data::Dump::pp( $filesref ), " ") and return(); my @realdirs = map { "".path($_)->parent } @files; push @realdirs, @{ $self->{REFLESSINC} }; my $OBJDUMP = $self->{OBJDUMP} or die "objdump not installed "; my( $stdout, $stderr, $exit ) = capture { system( $OBJDUMP, '-p', @files ); }; if( $exit ){ $stderr =~ s{\s+$}{}; warn "(@files):$exit: $stderr "; return; } #~ ::dd(-cap,[( $stdout, $stderr, $exit ) ]); my @dlls = $stdout =~ /DLL.Name:\s*(\S+)/gmi; @dlls = uniq( @dlls ); RELFILE: for my $relfile ( @dlls ){ if( my $full = $self->dll_get_fullpath( $relfile ) ){ warn "SKIPPING( $relfile ) BECAUSE( $full ) "; next RELFILE; } REFLESS: for my $inc ( @realdirs ){ my $file = "$inc/$relfile"; if( -e $file ){ $relfile = $file; $self->dll_add_path( $relfile ); #~ last REFLESS; next RELFILE; } } if( my $whichfile = $self->dll_which( $relfile ) ){ $relfile = $whichfile; $self->dll_add_path( $relfile ); } } ## recurse , infinitely { my @recurse_files; for my $file ( @dlls ){ if( not -e $file ){ warn "SKIPPING FROM RECURSION RELATIVE UNRESOLVED ( $file ) "; } else { push @recurse_files, $file; } } if( @recurse_files and $depth < 7 ){ push @dlls, $self->dll_linked( \@recurse_files , $depth+1 ) ; } #~ push @dlls, $self->dll_linked( \@recurse_files , $depth+1 ) if $depth < 5; } if( $depth == 0 ){ for my $file ( @dlls ){ if( path( $file )->is_absolute ){ $self->dll_add_path( $file ); } else { warn "UHOHUHOHUHOHUHOH( $file ) "; } } } return wantarray ? @dlls : $dlls[0]; } ## end sub dll_linked #~ sub dllwhich { sub dll_which { ::dd(\@_); my $self = shift; my @paths = ( @{$self->{PATH}} ); return undef unless @_; my $all = wantarray; my @files = map { my @fyle = $_; if( not /\.[^\.]+/ ){ @fyle = ( "$_.dll", "$_.so" ); ## stupid mod_perl filenames .... why would I care? } @fyle } @_; @files = $files[0] if not $all; my @dlls; for my $file ( @files ){ if( (my $realdll = path($file ) )->is_absolute ){ push @dlls, "$realdll" if $realdll->is_file; next; } for my $path ( @paths ){ if( my $realdll= eval{ path( $path, $file )->realpath }){ push @dlls, "$realdll" if $realdll->is_file; } } } $all ? @dlls : $dlls[0]; } ## end sub dll_which sub plx_scandeps { my $self = shift; my( $SCANDEPS, $infile, $CACHEFILE ) = @{$self}{qw{ SCANDEPS infile CACHEFILE }}; my @args = ( $SCANDEPS, '-V', '-c', '-C' => $CACHEFILE, $infile ); ::dd( \@args ); my( $stdout, $stderr, $exit ) = capture { system @args, }; if( $exit ){ $stderr =~ s{\s+$}{}; warn "plx_scandeps(( $infile ))(( $CACHEFILE )):exit($exit): $stderr "; return; }elsif( $stderr ){ warn "$stderr\n"; } my @dlls = $stdout =~ m{#\s+(\S+?\Q$Config::Config{so}\E)\s+\[shared\]}g; if( $stdout =~ m{(IUP|FLTK|Tk|Wx|Prima|Gtk|Qt|Win32.GUI|SDL|X11|PerlObjCBridge)\.pm}i ){ $self->{"DETECTED_$1"} = $1; $self->{"DETECTED_GUI"} = $1; } $self->{SCANDEPS_DLLS} = [ @dlls ]; for my $relfile ( @dlls ){ ## turn auto/... into $INC[]/auto... REFLESS: for my $inc ( @{ $self->{REFLESSINC} } ){ my $file = "$inc/$relfile"; if( -e $file ){ $relfile = $file; $self->dll_add_path( $relfile ); last REFLESS; } } } $self->{SCANDEPS_DLLS_FULLAPTH} = [ @dlls ]; $self->{SCANNED_SCANDEPS_DLLS} = [ $self->dll_linked( \@dlls ) ]; return $self; } ## end sub plx_scandeps sub Snack::Attack { ::dd(\@_); my $infile = shift; @_ and die "no more args fool "; my $self = Snack::->new( infile => $infile ); ::dd( $self ); $self->plx_scandeps; ::dd( $self ); #~ return; $self->pack_exe; #~ $self->try_it_out; return; } ## end sub Snack::Attack sub pack_exe { my $self = shift; my @args = ( $self->{DETECTED_Wx} ? $self->{WXPAR} : $self->{PP} , '--cachedeps' => $self->{CACHEFILE} , '-vvv', ); push @args, '-M' => 'Wx::Perl::Packager' if $self->{DETECTED_Wx}; #~ push @args, '--gui' if $self->{DETECTED_GUI}; #~ { #~ my $goners_re = join '|', map { quotemeta($_) } @{ $self->{EXCLUDE_CONFIG_LIBS} }; my $goners_re = do { my @goners = ( @{ $self->{EXCLUDE_CONFIG_LIBS} }, @{ $self->{EXCLUDE_PARL_LIBS} } ); @goners = map { path( $_ )->basename } @goners; join '|', map { quotemeta($_) } uniq( @goners ); }; my $windir = $ENV{WINDIR}; ## win32itis win64itis winitis my %dlls ;; for my $relfile ( @{ $self->{INCLUDE_PERL_LIBS} } , @{ $self->{SCANNED_SCANDEPS_DLLS} } , ){ if( my $full = $self->dll_get_fullpath( $relfile ) ){ my $windired = 0; $windired = 1 if defined $windir and path($windir)->subsumes($full); if( $relfile =~ m{$goners_re$}i or $windired ){ warn "removing -l ($relfile) "; } else { warn "adding -l ($full) "; $dlls{$full}++; } if( not $relfile =~ m{^(?:a(?:a(?:aamon|client)|c(?:c(?:essibilitycpl|tres)|l(?:edit|ui)|p(?:page|roxy)|t(?:i(?:on(?:center(?:cpl)?|queue)|veds)|xprxy))|d(?:h(?:api|svc)|m(?:parse|tmpl)|p(?:rovider|tif)|rclient|s(?:ldpc?|msext|n(?:ds|[tw]))|tschema|v(?:api32|pack))|e(?:cache|evts|inv|lupsvc|p(?:du|ic))|l(?:rsvc|ttab)|m(?:stream|xread)|p(?:cups|ds|i(?:\-ms\-win\-(?:appmodel\-(?:identity|runtime|state)\-l1\-1\-0|base\-(?:bootconfig|util)\-l1\-1\-0|core\-(?:a(?:p(?:iquery|p(?:compa|ini)t)|toms)\-l1\-1\-0|b(?:em|i(?:clt|p(?:lm|tclt))api)\-l1\-1\-0|c(?:o(?:m(?:\-private|m)?\-l1|nsole\-l[12])|rt\-l[12])\-1\-0|d(?:atetime\-l1\-1\-[01]|e(?:bug\-l1\-1\-[01]|layload\-l1\-1\-[01]))|errorhandling\-l1\-1\-[01]|fi(?:bers\-l(?:1\-1\-[01]|2\-1\-0)|le\-l(?:1\-[12]|2\-1)\-0|rmware\-l1\-1\-0)|h(?:andle\-l1\-1|eap\-(?:l1\-[12]|obsolete\-l1\-1))\-0|i(?:nterlocked\-l1\-[12]\-0|o\-l1\-1\-[01])|job\-l[12]\-1\-0|kernel32\-(?:legacy|private)\-l1\-1\-0|l(?:ibraryloader\-l1\-1\-[01]|ocal(?:ization\-(?:l(?:1\-[12]|2\-1)|obsolete\-l1\-1|private\-l1\-1)|registry\-l1\-1)\-0)|m(?:emory\-l1\-1\-[01]|isc\-l1\-1\-0|ultipleproviderrouter\-l1\-1\-0)|n(?:ame(?:dpipe\-l1\-[12]|space\-l1\-1)|ormalization\-l1\-1)\-0|p(?:ath\-l1\-1\-0|r(?:ivateprofile\-l1\-1\-0|o(?:cess(?:environment\-l1\-[12]\-0|security\-l1\-1\-0|t(?:hreads\-l1\-1\-[01]|opology\-(?:obsolete\-)?l1\-1\-0))|file\-l1\-1\-0))|s(?:api(?:\-(?:ansi|obsolete))?|m\-(?:app|info|plm))\-l1\-1\-0)|r(?:e(?:altime\-l1|gistry(?:\-(?:l[12]|private\-l1)|userspecific\-l1))\-1|tlsupport\-l1\-[12])\-0|s(?:h(?:lwapi\-(?:legacy|obsolete)|utdown)\-l1\-1|idebyside\-l1\-1|tring(?:\-(?:l[12]|obsolete\-l1)|ansi\-l1|loader\-l1)\-1|y(?:nch\-l1\-[12]|s(?:info\-l1\-[12]|temtopology\-l1\-1)))\-0|t(?:hreadpool\-(?:l(?:1\-[12]|egacy\-l1\-1)|private\-l1\-1)|imezone\-(?:private\-)?l1\-1|oolhelp\-l1\-1)\-0|u(?:ti|r)l\-l1\-1\-0|version(?:\-private|ansi)?\-l1\-1\-0|w(?:in(?:dowserrorreporting|rt(?:\-(?:error(?:private)?|propertysetprivate|r(?:egistration|o(?:buffer|parameterizediid))|string))?)|ow64)\-l1\-1\-0|xstate\-l1\-1\-[01])|d(?:evices\-(?:config|query|swdevice)\-l1|ownlevel\-(?:advapi32\-l[12]|normaliz\-l1|ole32\-l1|sh(?:ell32\-l1|lwapi\-l[12])|user32\-l1|version\-l1)|x\-d3dkmt\-l1)\-1\-0|event(?:ing\-(?:c(?:lassicprovid|on(?:sum|troll))er|legacy|obsolete|provider)|log\-(?:legacy|private))\-l1\-1\-0|gdi\-ie\-rgn\-l1\-1\-0|http\-time\-l1\-1\-0|input\-ie\-interactioncontext\-l1\-1\-0|mm\-(?:joystick\-l1|m(?:ci\-l1|isc\-l[12]|me\-l1)|playsound\-l1|time\-l1)\-1\-0|n(?:et\-isolation|tuser\-(?:dc\-access|ie\-(?:clipboard|message|w(?:indow|mpointer))|rectangle|sysparams|uicontext))\-l1\-1\-0|ole32\-ie\-l1\-1\-0|power\-(?:base|setting)\-l1\-1\-0|ro\-typeresolution\-l1\-1\-0|s(?:e(?:curity\-(?:a(?:ctivedirectoryclient|ppcontainer|udit)\-l1\-1\-0|base\-(?:l1\-[12]|private\-l1\-1)\-0|credentials\-l[12]\-1\-0|grouppolicy\-l1\-1\-0|lsa(?:lookup\-l(?:1\-1\-[01]|2\-1\-0)|policy\-l1\-1\-0)|provider\-l1\-1\-0|s(?:ddl(?:\-ansi|parsecond)?|ystemfunctions)\-l1\-1\-0|trustee\-l1\-1\-0)|rvice\-(?:core\-l1\-1\-[01]|management\-l[12]\-1\-0|private\-l1\-1\-0|winsvc\-l1\-[12]\-0))|h(?:core\-(?:comhelpers|obsolete|registry|s(?:caling|tream(?:\-winrt)?|ysinfo)|thread|unicodeansi)|ell\-shell(?:com|folders)|lwapi\-ie)\-l1\-1\-0))|logen|rcl|setschema)|p(?:h(?:elp|lpdm)|i(?:d(?:api|policyengineapi|svc)|nfo)|mg(?:mts|r)|rep(?:api|sync)|sruprov|x(?:alluserstore|deployment(?:client|extensions|server)|packaging|s(?:ip|treamingdatasourceps|ysprep)))|ss)|s(?:ferror|pnet_counters|ycfilt)|t(?:kctrs|mpvcno|race|l)|u(?:di(?:o(?:dev|en(?:dpointbuilder|g)|kse|s(?:es|rv))|t(?:cse|nativesnapin|pol(?:icygpinterop|msg)))|installagent|t(?:h(?:broker|ext|fw(?:cfg|gp|snapin|wizfwk)|hostproxy|ui|z)|o(?:disc|play))|xiliarydisplay(?:api|c(?:lassinstaller|pl)|driverlib|services))|v(?:i(?:cap|fil)32|meter|rt|tapi|wav)|xinstsv|z(?:role(?:ui|s)|sqlext))\.dll|b(?:a(?:se(?:csp|srv)|t(?:meter|t))|c(?:d(?:pro|sr)v|p47langs|rypt(?:primitives)?)|de(?:hdcfglib|repair|svc|ui)|fe|i(?:displ|oc(?:pl|redprov)|srv|ts(?:igd|p(?:erf|rx[234567]))|winrt)|l(?:ackbox|b(?:_p|event|re)s|uetoothapis)|oot(?:menuux|res|str|ux|vid)|r(?:dgcfg|idgeres|ow(?:cli|se(?:lc|ui|wm|r)))|t(?:h(?:ci|hfsrv|mtpcontexthandler|panapi|radiomedia|s(?:erv|qm))|panui)|wunpairelevated|i)\.dll|c(?:_(?:g18030|is(?:2022|cii))|a(?:b(?:inet|view)|llbuttons(?:\.proxystub)?|mocx|p(?:esnpn|i(?:provider|sp))|rd(?:game)?s|tsrv(?:ps|ut)?)|c(?:fgnt|a)|d(?:fview|modem|osys|[dm])|e(?:rt(?:c(?:li|redprovider|a)|en(?:roll(?:ui)?|c)|mgr|p(?:oleng|rop))|wmdm)|f(?:g(?:bkend|mgr32)|mifs(?:proxy)?)|h(?:artv|kwudrv|sbrkr|tbrkr|xreadingstringime)|i(?:admin|odm|rcoinst|c)|l(?:bcat(?:ex|q)|fsw32|iconfg|rhost|usapi|b)|m(?:cfg32|d(?:ext|ial32)|i(?:cryptinstall|fw|pnpinstall)|lua|nclim|p(?:bk32|rops)|s(?:etacl|tplua)|util)|n(?:bjmon|etcfg|g(?:audit|credui|provider)|vfat)|o(?:firedm|l(?:bact|or(?:cnv|ui))|m(?:addin|base|c(?:at|tl32)|dlg32|pstui|re(?:pl|s)|s(?:nap|vcs)|uid)|n(?:fmsp|nect(?:edaccountstate)?|s(?:entux|ole))|py|r(?:pol|rengine))|pfilters|r(?:ed(?:ssp|ui)|ppresentation|tdll|ypt(?:32|base|catsvc|dl[gl]|ext|net|owinrt|s(?:vc|p)|ui(?:wizard)?|xml))|s(?:c(?:api|dll|mig|obj|svc|ui)|rsrv|seqchk)|tl3d32|i)\.dll|d(?:2d1|3d(?:1(?:0(?:_1(?:core)?|core|level9|warp)|[01])|8thk|im(?:700)?|pmesh|r(?:amp|m)|xof|[89])|a(?:conn|f(?:bth|printprovider|upnp|w(?:cn|fdprovider|sd))|mm|nim|otpcredentialprovider|t(?:aclen|ime|usage)|v(?:clnt|hlpr)|s)|b(?:g(?:eng|help)|msrpcn|n(?:etlib|mpntw))|c(?:iman32|omp)|d(?:aclsys|o(?:iproxy|res)|p(?:_ps|chunk|trace|utils)|raw(?:ex)?)|e(?:f(?:ault(?:devicemanager|locationcpl|printerprovider)|rag(?:proxy|svc))|legatorprovider|sk(?:adp|mon|perf)|v(?:dispitemprovider|enum|i(?:ce(?:a(?:ccess|ssociation)|center|d(?:isplaystatusmanager|riverretrievalclient)|elementsource|metadata(?:parsers|retrievalclient)|pairing(?:folder|handler|proxy)?|setup(?:manager(?:api)?|statusprovider)|uxres)|nv)|mgr|obj|propmgr|rtl))|f(?:dts|rg(?:res|snap|ui)|s(?:cli|him|shlex))|gnet|hcp(?:c(?:monitor|ore6?|svc6?)|mon|qec|sapi)|i(?:a(?:ctfrm|g(?:cpl|perf))|fxapi|gest|m(?:ap|s(?:job|ntfy|roam))|nput8?|s(?:can|kcopy|mapi|p(?:ci|ex|lay)))|lnashext|m(?:band|co(?:mpos|nfig)|d(?:lgs|sk(?:mgr|res2?))|i(?:me|ntf)|loader|ocx|rc|s(?:cript|erver|tyle|ynth)|u(?:sic|til)|v(?:dsitf|scres))|ns(?:api|cmmc|ext|hc|rslvr)|o(?:c(?:prop2?|umentperformanceevents)|t3(?:api|cfg|dlg|gp(?:clnt|ui)|hc|ms?m|svc|ui))|p(?:api(?:provider|srv)?|cdll|layx?|modemx|n(?:a(?:ddr|thlp)|et|h(?:past|upnp)|lobby|modem|wsock)|serial|v(?:acm|oice|vox)|wsockx?|[sx])|r(?:m(?:clien|mgrtn|stor|v2clt)|prov|t(?:prov|transport)|vstore|t)|s(?:32gt|auth|dmo(?:prp)?|howrdpfilter|kquo(?:ta|ui)|ound(?:3d)?|p(?:arse|r(?:op|pres))|query|role|se(?:nh|c)|ui(?:ext)?|wave)|tsh|u(?:i70|ser)|w(?:m(?:api|core|redir)|rite)|x(?:7vb|8vb|diagn|g(?:wd)?i|masf|p(?:ps|task(?:ringtone|sync))|t(?:msft|rans)|va2|p))\.dll|e(?:a(?:p(?:olqec|p(?:3hst|cfg|gnui|host|prxy)|qec|svc)|s(?:consent|invoker\.proxystub|wrt))|fs(?:adu|core|lsaext|svc|util)|hstor(?:api|pwdmgr|shell)|ls(?:core|hyph|lad|trans)?|n(?:c(?:api|d(?:ec|ump))|ergy(?:prov|task)?)|qossnap|rsvc|sent(?:97|prf)?|v(?:ent(?:cls|log)|r)|x(?:p(?:lorerframe|srv)|t(?:\-ms\-win\-(?:a(?:dvapi32\-(?:auth|e(?:ncryptedfile|vent(?:ingcontroller|log))|lsa|msi|ntmarta|psm\-app|registry|s(?:afer|hutdown))|uthz\-(?:c(?:laimpolicies|ontext)|remote))|b(?:iometrics\-winbio|luetooth\-deviceassociation|randing\-winbrand)|c(?:luster\-(?:clusapi|resutils)|md\-util|ng\-rng|om\-(?:clbcatq|ole32|psmregister))|domainjoin\-netjoin|f(?:irewallapi\-webproxy|s(?:\-clfs|utilext\-(?:ifsutil|ulib)))|g(?:di\-(?:d(?:c\-create|evcaps|raw|c)|font|metafile|path|r(?:ender|gn)|wcs)|papi\-grouppolicy|ui\-uxinit)|kernel(?:32\-(?:appcompat|datetime|errorhandling|file|package(?:\-current)?|registry|sidebyside|transacted|windowserrorreporting)|base\-processthread)|m(?:f\-winmm|m\-(?:msacm|pehelper|wmdrmsdk)|pr\-multipleproviderrouter|rmcorer\-resmanager|siltcfg\-msi)|n(?:e(?:tworking\-winipsec|wdev\-config)|t(?:dsa(?:\-activedirectoryserver|pi\-activedirectoryclient)|os\-(?:ks(?:ecurit|igningpolic)y|tm)|user\-(?:caret|d(?:c\-access\-ext|ialogbox|raw)|gui|keyboard|m(?:e(?:nu|ssage)|isc|ouse)|p(?:owermanagement|rivate)|rectangle\-ext|s(?:tring|y(?:nch|sparams\-ext))|window(?:class|station)?)))|ole32\-(?:bindctx|clipboard\-ie|ie\-ext|oleautomation)|pr(?:inter\-winspool|ofile\-(?:profsvc|userenv))|r(?:as\-(?:ras(?:api32|dlg|man)|tapi32)|ometadata\-dispenser)|s(?:amsrv\-accountstore|cesrv\-server|e(?:cur(?:32\-translatename|ity\-(?:cr(?:ed|ypt)ui|kerberos|vaultcli))|ssion\-(?:userinit|w(?:in(?:init|sta)|tsapi32))|tupapi\-(?:c(?:fgmgr32(?:local|remote)|lassinstallers)|inf|logging))|hell(?:32\-shell(?:com|folders)|\-(?:propsys|sh(?:ell32|lwapi)))|mbshare\-sscore|pinf\-inf|xs\-oleautomation)|umpoext\-umpo|w(?:e(?:bio\-pal|r\-reporting|vtapi\-eventlog)|in(?:http|inet)\-pal|lan\-(?:grouppolicy|onexui|scard)|sclient\-devlicense|wan\-wwapi))\-l1\-1\-0|mgr|s))|s)\.dll|f(?:3ahvoas|aultrep|d(?:bth(?:proxy)?|devquery|eploy|p(?:host|np|r(?:int|oxy))|respub|ssdp|w(?:cn|net|sd)|e)|e(?:client|edbacktool)|h(?:autoplay|c(?:at|fg|leanup|pl)|e(?:ngine|vents)|listen|s(?:hl|rch(?:api|ph)|vc(?:ctl)?)|task|ux(?:a(?:dapter|pi)|common|graphics|presentation))|i(?:le(?:appxstreamingdatasource|mgmt)|ndnetprinters|rewall(?:api|controlpanel))|l(?:drclnr|tlib)|m(?:api|ifs|s)|ntcache|ont(?:ext|sub)|phc|r(?:ame(?:buf|dyn(?:os)?)|prov)|su(?:sd|tilext)|t(?:hsvc|lx041e|srch)|undisc|ve(?:api(?:base)?|c(?:erts|pl)|recover|skybackup|ui|wiz)|w(?:cfg|puclnt|remotesvr)|xs(?:api|com(?:ex|pose(?:res)?)?|e(?:vent|xt32)|mon|r(?:esm|oute)|st|t(?:30|iff)|utility|xp32))\.dll|g(?:a(?:cinstall|meux(?:legacygdfs)?)|cdef|di(?:32|plus)|e(?:nuinecenter|tuname)|l(?:cndfilter|mf32|u32)|p(?:api|edit|k(?:csp|rsrc)|pr(?:efcl|next)|s(?:cript|vc)|text)|roupinghc)\.dll|h(?:323msp|al(?:acpi|extintc(?:lpio|uart)dma|macpi)?|baapi|c(?:coin|providers)|elppaneproxy|g(?:cpl|print)|hsetup|id(?:serv)?|link|net(?:cfg|mon|wiz)|ot(?:plug|s(?:potauth|tartuseragent))|t(?:tp(?:api|prx[mp])|ui))\.dll|i(?:as(?:a(?:cct|ds)|datastore|hlpr|migplugin|nap|polcy|r(?:ad|ecst)|s(?:am|do|vcs))?|c(?:a(?:api|rd(?:ie|res))|coinstall|f(?:gnt5|upgd)|m(?:32|ui|p)|oncodecservice|s(?:igd|vc)|w(?:dial|phbk))|d(?:ctrls|listen|ndl|store|q)|e(?:a(?:dvpack|k(?:eng|sie|ui)|pfltr)|dkcs32|frame|peers|r(?:nonce|tutil)|s(?:etu|yspre)p|ui)|f(?:mon|sutilx?)|g(?:ddiag|mpagnt)|issuba|keext|ls|m(?:a(?:ge(?:hlp|res|sp1)|pi(?:2fs|2)?)|eshare|gutil|jp(?:10|81)k|m32)|n(?:et(?:c(?:fg|omm|plc)|mib1|pp(?:ui)?|res)|fo(?:cardapi|soft)|itpki|ked|put(?:switch)?|seng)|ologmsg|p(?:busenum(?:proxy)?|hlp(?:api|svc)|montr|nathlp|promon|r(?:op|t(?:prio|rmgr))|s(?:ecs(?:np|vc)|msnap)|v6mon|x(?:montr|promn|r(?:ip|tmgr)|sap|wan))|r(?:32_32|41_qcx?|50_(?:32|qcx?)|class|mon)|s(?:csi(?:cpl|dsc|e(?:xe|d)|log|um|wmi(?:v2)?)|ign32)|t(?:ircl|ss|vdata)|u(?:engine|ilp)|xsso|yuv_32)\.dll|j(?:et500|nwmon|obexec|s(?:cript9?|proxy))\.dll|k(?:bd(?:10(?:1[abc]|6n|[136])|a(?:rm(?:ph|ty|[ew])|x2|zel?|[123l])|b(?:ash|ene|gph1?|hc|lr|ulg|[eru])|c(?:an|herp?|z[12]|[arz])|d(?:iv[12]|[av])|est?|f(?:ar|i1|[acior])|g(?:ae|eo(?:er|me|oa|qw)?|kl|r(?:lnd|1)|r)|h(?:a[uw]|e(?:220|319|bl3|la[23]|pt|b)|u1|[eu])|i(?:b(?:m02|o)|n(?:asa|be[12n]|dev|en|guj|hin|kan|ma[lr]|ori|pun|t(?:am|el)|uk2)|t142|ul(?:at|tn)|[crt])|jpn|k(?:az|hmr|ni|or|urd|yr)|l(?:ao|isu[bs]|k41[aj]|t[12]|v1|[atv])|m(?:a(?:cst|ori|c)|lt4[78]|on(?:mo)?|yan)|n(?:e(?:c(?:95|at|nt)|pr|c)|ko|o1|so|tl|[eo])|ogham|p(?:ash|hags|l1|[lo])|r(?:o(?:pr|st)|u[1m]|[ou])|s(?:l1|ms(?:fi|no)|n1|or(?:ex|s[1t])|w09|yr[12]|[fglpw])|t(?:a(?:ile|jik|t)|h[0123]|i(?:fi2?|prc)|u(?:rme|[fq]))|u(?:ghr1?|kx|r(?:du|1)|s[alrx]|zb|[krs])|vntc|wol|y(?:ak|ba|c[cl]))|d(?:1394|_02_(?:1(?:0ec|4e4)|8086)|com|hv1394|net|s(?:cli|tub)|usb|vm)|e(?:epaliveprovider|r(?:beros|nel(?:32|base|ceip))|y(?:iso|mgr))|msvc|orwbrkr|suser|tmw32|d)\.dll|l(?:2(?:gpstore|nacp|sechc)|a(?:ng(?:cleanupsysprepaction|wrbk)|prxy)|i(?:c(?:dll|mgr10|wmi)|nkinfo|stsvc|vessp)|l(?:dpnotify|td(?:api|res|svc))|m(?:hsvc|rt)|o(?:adperf|ca(?:l(?:s(?:ec|pl)|ui)|tionapi)|g(?:hours|oncli))|p(?:ksetupproxyserv|r(?:help|monui)|k)|s(?:asrv|cshostpolicy|mproxy|m)|uainstall|z32)\.dll|m(?:a(?:g(?:_hook|nification)|intenanceui|pi(?:32|stub))|b(?:ae(?:api(?:public)?|xmlparser)|smsapi|ussdapi)|c(?:astmib|d(?:srv)?32|ewmdrmndbootstrap|hgrcoi|i(?:avi32|cda|ole32|qtz32|seq|wave)|mde|srchph|tres|update_(?:authenticamd|genuineintel)|x(?:2svc|driv))|d(?:hcp|minst)|e(?:diametadatahandler|m(?:diag|orydiagnostic))|f(?:3216|a(?:acenc|sfsrcsnk)|c(?:4(?:0u|2u|[02])|70|aptureengine|ore|subs)|d(?:vdec|s)|error|h264enc|m(?:ediaengine|jpegdec|p(?:eg2|4)srcsnk)|net(?:core|src)|p(?:la[ty]|s)|readwrite|s(?:rcsnk|vr)|transcode|vdsp|wmaaec)|gmtapi|i(?:crosoft(?:\-windows\-(?:battery\-events|hal\-events|kernel\-p(?:np|ower|rocessor\-power)\-events|p(?:dc|rocessor\-aggregator\-events))|\.managementconsole)|dimap|g(?:flt|isol|libnt|uiresource)|mefilt|utils)|l(?:ang|l_(?:hp|mtf|qic))|m(?:c(?:base|ex|fxcommon|ico|ndmgr|s(?:hext|s)|i)|d(?:evapi|rv)|futil|res|utilse)|nmdd|o(?:bsync|de(?:mui|x)|ntr_ci|ricons)|p(?:3dmod|4(?:3d(?:ec|mo)|sd(?:ec|mo))d|g4d(?:ec|mo)d|r(?:api|d[di]m|ext|msg|ui)|ssvc|r)|q(?:ad|certui|dscli|gentr|ise|logmgr|oa|perf|qm|rt(?:dep)?|s(?:ec|nap)|trig|u(?:pgrd|til))|rm(?:cor|index)er|s(?:a(?:atext|c(?:3enc|m32)|fd|psspc|sn1|ud(?:decmft|ite))|c(?:a(?:ndui|t32)|hed|lmd|ms|o(?:nf|r(?:ee|ie[rs]))|px(?:32r|l32)|tf(?:monitor|ui|p)?)|d(?:a(?:diag|rt)|bg2|elta|mo|r[im]|tc(?:krm|log|prx|tm|uiu|vsp1res)|xmlc)|e(?:ncode|xc[hl]40)|f(?:eeds(?:bs)?|tedit)|g(?:ina|svc)|html(?:e[dr])?|i(?:cofire|d(?:crl[34]0|ent|le|ntld)|eftp|hnd|ltcfg|m(?:g32|sg|tf)|r3jp|sip|wer)|j(?:et(?:oledb)?|int|te[rs])40|keyprot(?:cli|ect)|l(?:bui|s31|tus40)|m(?:msp|peg2(?:ade|en|vde)c)|n(?:etobj|sspc)|o(?:bjs|e(?:acct|rt2)|rc(?:32r|l32))|p(?:atch[ac]|bd(?:acoinst|e40|a)|ms(?:nsv|p)|orts|rivs)|r(?:2c(?:enu)?|a(?:hc|t(?:elc|ing))|clr40|d(?:2x40|3x40|pwebaccess|c)|e(?:cr|pl)40|le32)|s(?:ap|c(?:ntrs|p)|h(?:avmsg|ooks|a)|i(?:gn32|p32|tlb)|p(?:ellcheckingfacility|htb|rxy|h)|rch|vp|wch)|t(?:ask|ext(?:40|prediction)|ime|lsapi|scax)|utb|v(?:1_0|bvm[56]0|c(?:irt|p(?:110_clr040|[56])0|r(?:1[01]0_clr0400|70|t[24]0|t))|fw32|id(?:c(?:32|tl)|eodsp)|proc)|w(?:3prt|dat10|ebdvd|mdm|s(?:ock|tr10))|x(?:bde40|ml(?:2r|3r|6r|[236r])?)|yuv|i)|tx(?:clu|dm|ex|legih|oci)|ui(?:fontset|languageclean)up|y(?:comput|docs)|[fi])\.dll|n(?:a(?:p(?:crypt|dsnap|hlpr|i(?:nsp|psec)|montr)|rrhook|t(?:ivehooks|urallanguage6))|c(?:a(?:api|svc)|bservice|d(?:autosetu|pro)p|objapi|rypt(?:prov|sslp|ui)?|si|xpnt|i)|d(?:de(?:api|nb32)|f(?:api|etw|hcdiscovery)|is(?:capcfg|hc|implatform)|proxystub|uprov)|e(?:goexts|t(?:api32|bios|c(?:enter|fgx|orehc)|diagfx|event|fxperf|i(?:ohlp|d)|join|logon|m(?:an|sg)|p(?:lwiz|ro(?:fm(?:svc)?|jw|visionsp|f))|rap|shell|trace|u(?:i[012]|tils)|work(?:explorer|itemfactory|map|status)|h)|wdev)|input|l(?:a(?:api|hc|svc)|html|m(?:gp|proxy|sprep)|s(?:bres|d(?:ata0(?:0(?:0[012379acdf]|1[01389abd]|2[012467a]|3[9e]|4[5679abce])|41[46]|81[6a]|c1a)|l)|lexicons0(?:0(?:0[12379acdf]|1[01389abd]|2[012467a]|3[9e]|4[5679abce])|41[46]|81[6a]|c1a)|models0011))|m(?:evtmsg|mkcert)|ormaliz|p(?:mproxy|ptools)|rpsrv|s(?:h(?:http|ipsec|wfp)|isvc|i)|t(?:asn1|d(?:ll|s(?:ap|bcl)i)|l(?:an(?:man|ui2?)|sapi)|m(?:arta|s(?:api|dba|evt|mgr|svc))|print|s(?:dexts|hrui)|vdm(?:cpl|d))|w(?:api(?:16|32)|cfg|event|provau|wks))\.dll|o(?:akley|bjsel|c(?:cache|manage|setapi)|d(?:bc(?:32(?:gt)?|bcp|c(?:onf|p32|r32|u32)|int|j[it]32|p32r|trac)|dbse32|exl32|fox32|pdx32|text32)|emlicense|fffilt|gldrv|le(?:32|a(?:cc(?:hooks|rc)?|ut32)|c(?:li|nv)32|dlg|pr(?:o32|n)|res|svr32|thk32)|n(?:ex(?:ui)?|lineidcpl)|obefldr|p(?:cservices|engl32)|s(?:baseln|ksupport|uninst))\.dll|p(?:2p(?:collab|g(?:asvc|raph)|netsh|svc)?|a(?:ckage(?:stateroaming|r)|nmap|utoenr)|c(?:a(?:cli|dm|evts|svc|ui)|p(?:ksp|tpm12)|wu(?:tl|m))|dh(?:ui)?|e(?:erdist(?:ad|cleaner|httptrans|s(?:vc|h)|wsddiscoprov)?|rf(?:c(?:entercpl|trs)|disk|n(?:et|w)|os|proc|t(?:rack|s)))|hoto(?:metadatahandler|wiz)|i(?:dgenx?|fmgr|d)|jlmon|ku2u|l(?:ay(?:listfolder|sndsrv|to(?:manag|statusprovid)er)|ustab|a)|mcsnap|n(?:gfilt|idui|p(?:policy|setup|ts|ui|xassoc(?:prx)?)|rp(?:auto|hc|nsp|svc))|o(?:lstore|rtabledevice(?:api|c(?:lassextension|onnectapi)|s(?:tatus|yncprovider)|types|w(?:iacompat|mdrm))|ts|w(?:ercpl|rprof))|pcsnap|r(?:esentation(?:cffrasterizernative_v0300|hostproxy|native_v0300)|flbmsg|int(?:dialogs|filterpipelineprxy|isolationproxy|ui)|n(?:cache|fldr|ntfy|tvpt)|o(?:cinst|f(?:api|ext|map|prov|svc(?:ext)?)|psys|v(?:core|svc|thrd)|ximity(?:common|service))|vdmofcomp)|s(?:api|base|chdprf|hed|isdecd|m(?:odulediscoveryprovider|srv)|nppagn|t(?:ask|or(?:sv|e)c))|u(?:i(?:api|obj)|rchasewindowslicense)|w(?:launcher|rshplugin|sso))\.dll|q(?:a(?:gent(?:rt)?|sf)|c(?:ap|liprov)|dvd?|ed(?:it|wipes)|mgr(?:prxy)?|osname|s(?:hvhos|vrmgm)t|u(?:artz|ery|til)|wave)\.dll|r(?:a(?:c(?:engn|pldlg)|dar(?:dt|rs)|s(?:a(?:dhlp|pi32|uto)|c(?:fg|hap|trs)|d(?:ia|l)g|gcw|m(?:ans?|bmgr|ontr|xs|m)|p(?:la|p)p|qec|rad|s(?:api|er)|t(?:api|ls)))|cbdyctl|d(?:chost|p(?:c(?:fgex|ore(?:kmts|ts)?)|d3?d|en(?:c(?:dd|om)|dp)|refd(?:rvapi|d)|snd|udd|wsx)|s(?:appxhelpe|dwmd)r|vvmtransport)|e(?:agent|covery|g(?:api|ctrl|idle|svc|wizc)|mo(?:tepg|vedevice(?:contexthandler|elevated))|nd|s(?:ampledmo|eteng(?:mig)?|utils))|fxvmt|gb9rast|httpaa|iched(?:20|32)|mapi|nr20|o(?:amingsecurity|metadata|tmgr|utetab)|pc(?:diag|epmap|http|n(?:dfp|s[4h])|rt(?:remote|4)|ss)|s(?:aenh|fsaps|hx32|mps|trtmgr|vp(?:msg|perf|sp))|t(?:ffilt|ipxmib|utils|m)|wnh)\.dll|s(?:3legacy|a(?:fr(?:cdlg|dm|slv)|m(?:cli|lib|pleres|srv)|s)|be(?:io|res)?|c(?:a(?:nsetting|rd(?:dlg|s(?:sp|vr))|vengeui)|c(?:base|ls|sccp)|e(?:cli|srv|xt)|h(?:annel|ed(?:cli|svc))|ksp|lgntfy|r(?:edir|ipto|obj|ptadm|run))|d(?:autoplay|cpl|engin2|hcinst|iag(?:eng|prv|schd)|ohlp|pblb|rsvc|shext)|e(?:archfolder|c(?:host|logon|proc(?:_(?:isv|ssp(?:_isv)?))?|ur(?:32|ity))|n(?:d(?:cmsg|mail)|s(?:api|cfg|or(?:performanceevents|s(?:api|c(?:lassextension|pl)))|rsvc)|s)|r(?:ialui|vdeps|wvdrv)|ssenv|t(?:bcdlocale|networklocation|ting(?:monitor|sync(?:info)?)|up(?:api|cln|dll|etw)))|f(?:c(?:_o|file)s|mapi|c)|h(?:a(?:cct|remediacpl)|core|doc(?:lc|vw)|ell(?:32|style)|folder|gina|im(?:eng|gvw)|lwapi|media|pafact|s(?:crap|etup|vcs)|unimpl|websvc)|i(?:g(?:ndrv|tab)|m(?:auth|cfg)|sbkup)|kdll|l(?:ayerxp|cext|wga|c)|m(?:artcard(?:credentialprovide|simulato)r|b(?:helperclass|wmiv2)|iengine|logcfg|s(?:deviceaccessrevocation|pace|router)|tpapi)|n(?:dvolsso|mp(?:api|snap)|tsearch)|o(?:ft(?:kbd|pub)|rt(?:server2003compat|windows6(?:compat|1)))|p(?:acecontrol|bcd|cmsg|error|fileq|inf|m(?:pm|sg)|net|o(?:olss|pk)|p(?:c(?:ext|om(?:api|mdlg)|c)|inst|np|objs|uinotify|w(?:inob|mi)|c)|w(?:i(?:nsat|z(?:eng|img|res|ui))|mp)|p)|q(?:l(?:ce(?:compact4|oledb[34]|qp[34]|se[34])0|srv32|unirl|w(?:id|oa))|mapi)|r(?:c(?:hadmin|lient|ore)|events|helper|m(?:_ps|client|lib|s(?:can|hell|tormod)|trace)|puxnativesnapin|rstr|svc|um(?:api|svc)|v(?:cli|svc)|wmi|[hm])|s(?:core(?:ext)?|dp(?:api|srv)|pi(?:cli|srv)|shim|tpsvc)|t(?:artupscan|client|i_ci|o(?:bject|r(?:age(?:contexthandler|wmi(?:_passthru)?)|ewuauth|prop|svc))|r(?:eamci|m(?:dll|filt)|ucturedquery)|i)|u(?:bscriptionmgr|d)|v(?:cpack|svc)|wprv|x(?:proxy|s(?:hared|s(?:rv|tore))|s)|y(?:nc(?:center|eng|hostps|infrastructure(?:ps)?|reg|ui)|s(?:class|fxui|inv|main|ntfy|prepmce|setup|tem(?:cpl|eventsbroker(?:client|server)))))\.dll|t(?:2embed|a(?:b(?:btn(?:ex)?|svc)|pi(?:32|lua|migplugin|perf|s(?:rv|ysprep)|ui|3)|sk(?:barcpl|comp|schd(?:ps)?))|bs(?:svc)?|cp(?:ipcfg|m(?:ib|on(?:ui)?))|dh|erm(?:mgr|srv)|h(?:awbrkr|eme(?:cpl|service|ui)|readpoolwinrt|umbcache)|ime(?:broker(?:client|server)|datemuicallback|synctask)|l(?:ntsvr|scs)p|pm(?:compc|tasks|vsc)|query|r(?:a(?:ffic|pi)|kwks)|s(?:appcmp|byuv|c(?:fgwmi|hannel)|ddd|errredir|gqec|mf|p(?:kg|nprdrcoinstaller|ubwmi)|srvlic|usb(?:gdcoinstaller|redirectiongrouppolicyextension)|workspace)|tls(?:auth|cfg)|vratings|w(?:ext|in(?:ap|u)i)|xf(?:log|w32)|zres)\.dll|u(?:bpm|cmhc|d(?:hisapi|wm)|exfat|fat|i(?:a(?:nimation|utomationcore(?:res)?)|com|hub|r(?:eng|ibbon(?:res)?))|lib|m(?:andlg|dmxfrm|p(?:npmgr|o(?:ext|wmi)|o)|rdp|b)|n(?:attend|i(?:ime|mdmat|plat)|tfs)|pnp(?:host|ui)?|r(?:eg|lmon|l)|s(?:b(?:ceip|mon|perf|ui)|er(?:32|accountcontrolsettings|cpl|env|initext|language(?:profilecallback|scpl))|p10|tprov)|tildll|udf|x(?:init|lib(?:res)?|sms|theme))\.dll|v(?:a(?:ult(?:c(?:li|redprovider)|roaming|svc)?|n)|b(?:ajet32|oxogl(?:arrayspu|crutil|errorspu|feedbackspu|pa(?:ck|ssthrough)spu)|script)|cdex|d(?:mdbg|s(?:_ps|bas|dyn|util|vd))|er(?:ifier|sion)|f(?:podbc|wwdm32)|ga(?:256|64k)?|i(?:dreszr|rtdisk)|joy|m(?:applicationhealthmonitorproxy|bus(?:coinstaller|pipe|res)|dcoinstall|ic(?:res|timeprovider)|rdvcore|s(?:rvc|torfltres))|p(?:c\-s3|nike(?:api)?)|s(?:cmgrps|s(?:_ps|api|trace))|wipxspx)\.dll|w(?:3(?:2t(?:ime|opl)|ssl)\.dll|a(?:bsyncprovider|v(?:dest|emsp))\.dll|b(?:emcomn|iosrvc)\.dll|c(?:m(?:api|csp|svc)|n(?:api|csvc|eap(?:auth|peer)proxy|netsh|wiz)|spluginservice)\.dll|d(?:fres|i(?:asqmmodule|gest)|score|[ci])\.dll|e(?:b(?:c(?:amui|heck|lnt)|hits|io|s(?:ervices|ocket)|vw)|c(?:api|svc)|r(?:c(?:oncpl|plsupport)|diagcontroller|svc|ui)|vt(?:api|fwd|svc)|r)\.dll|f(?:apigp|dprov|hc|sr)\.dll|h(?:ealog|helpe)r\.dll|i(?:a(?:aut|d(?:efui|ss)|rpc|s(?:c(?:anprofiles|r)|ervc|hext)|trace|v(?:ideo|usd))\.dll|mgapi\.dll|n(?:32spl\.dll|b(?:io|rand)\.dll|credprovider\.dll|dows(?:\.(?:applicationmodel(?:\.(?:background\.(?:systemevents|time)broker|store(?:\.testingframework)?))?|devices\.(?:enumeration(?:\.ps)?|geolocation|p(?:ortable|rinters\.extensions)|sensors)|g(?:lobalization(?:\.fontgroups)?|raphics(?:\.printing)?)|help\.runtime|immersiveshell\.serviceprovider|media(?:\.(?:devices|mediacontrol|renewal|streaming(?:\.ps)?))?|networking(?:\.(?:backgroundtransfer|connectivity|networkoperators\.hotspotauthentication|proximity|sockets\.pushenabledapplication))?|s(?:ecurity\.(?:authentication\.onlineid|credentials\.ui\.credentialpicker)|torage\.(?:applicationdata|compression)|ystem\.(?:display|profile\.hardwareid|remotedesktop))|ui(?:\.(?:i(?:mmersive|nput\.inking)|xaml))?|web)|codecs(?:ext)?|livelogin)\.dll|ethc\.dll|fax\.dll|http\.dll|i(?:n(?:et(?:\.dll)?|itext\.dll)|psec\.dll)|langdb\.dll|m(?:de|mbase|soirmprotector|m)\.dll|n(?:si|tbbu)\.dll|opcirmprotector\.dll|r(?:nr|s(?:cmd|mgr|srv))\.dll|s(?:atapi|card|hfhc|ku|ockhc|r(?:pc|v)|t(?:rm|a)|ync(?:metastore|providers)?)\.dll|t(?:rust|ypes)\.dll|usb\.dll)|sp\.dll|tnesswmiv2provider\.dll)|ks(?:cli|p(?:brokerax|rtps)|svc)\.dll|l(?:an(?:api|c(?:fg|onn)|dlg|gpui|h(?:lp|c)|inst|ms?m|pref|radiomanager|s[ev]c|u(?:til|i))|dap32|gpclnt|id(?:c(?:li|redprov)|fdp|nsp|prov|res|svc)|notify|roamextension|s0wndh)\.dll|m(?:a(?:dmo[de]|lfxgfxdsp|sf)|codecdspps|d(?:m(?:log|ps)|rm(?:dev|net|sdk))|err(?:enu|or)|i(?:c(?:lnt|miplugin)|d(?:com|x)|prop|scmgr|tomi)|netmgr|p(?:asf|c(?:ore|[dm])|d(?:ui|xm)|e(?:ffects|ncen)|hoto|loc|mde|ps|s(?:hell|rcwp)|ui)|s(?:dmo(?:e2|[de])|gapi|pdmo[de]|tream)|v(?:core|d(?:ecod|mo(?:e2|d)|spa)|encod|s(?:de|en)cd|xencd)|[ip])\.dll|o(?:rkerdd|w(?:32|fax(?:ui)?))\.dll|p(?:c(?:ao|cpl|mig|svc|umi|websync)|d(?:_ci|busenum|s(?:h(?:ext|serviceobj)|p)|wcn)|n(?:apps|core|inprc|prv|sruprov)|c)\.dll|s(?:2(?:_32|help)|c(?:api|i(?:nterop|svif)|lient|misetup|proxystub|svc)|d(?:api|chngr|mon|printproxy|scanproxy)|e(?:cedit|pno)|h(?:atm|bth|con|e(?:lper|xt)|i(?:p6|rda|sn)|netbs|qos|rm|tcpip)|m(?:a(?:gent|nmigrationplugin|uto)|plpxy|res|svc|wmipl)|nmp32|ock32|s(?:ervice|hared|ync)|tdecod)\.dll|tsapi32\.dll|u(?:a(?:ext|pi|u(?:eng1?|serv))|cltu[ix]|d(?:f(?:coinstaller|platform|svc|x)|river)|ps2?|s(?:ettingsprovider|hareduxresources)|webv?)\.dll|vc\.dll|wa(?:api|n(?:a(?:dvu|p)i|c(?:fg|onn)|hc|inst|mm|pr(?:ef|otdim)|radiomanager|svc)|pi)\.dll|zc(?:dlg|s(?:api|vc))\.dll)|x(?:a(?:ctsrv|udio2_8)|enroll|input(?:1_4|9_1_0)|ml(?:filter|lite|provi?)|olehlp|p(?:ob2res|s(?:filt|gdiconverter|p(?:1res|2res|3res|rint)|rasterservice|s(?:ervices|hhdr|vcs)))|w(?:izards|reg|tp(?:dui|w32)))\.dll|z(?:gmprxy|ipfldr)\.dll|\-)$}i ){ warn "adding ANYWAY -l ($full) "; $dlls{$full}++; } } else { warn "COULDN'T FIND IT SO ignoring -l ($relfile) "; ## Wx::Perl::Packager helps Wx } } push @args, map {; "-l" => $_ } sort keys %dlls ; } push @args, '--output' => $self->{outfile}, '-c', $self->{infile} ;; ::dd( \@args ); system @args; print "try $$self{outfile} \nif it works without %PATH% change it to gui with ( $EXE_UPDATE )\n"; return; } ## end sub pack_exe } ## end BEGIN __END__