@@ -74,8 +74,10 @@ pub const DEV: &str = "dev";
7474pub const CANARY : & str = "canary" ;
7575pub const NIGHTLY : & str = "nightly" ;
7676pub const ESR : & str = "esr" ;
77- pub const WMIC_COMMAND : & str = r#"wmic datafile where name='{}' get Version /value"# ;
78- pub const WMIC_COMMAND_OS : & str = r#"wmic os get osarchitecture"# ;
77+ pub const WMIC : & str = "wmic" ;
78+ pub const WMIC_DEFAULT_PATH : & str = r#"{}\System32\Wbem\WMIC.exe"# ;
79+ pub const WMIC_COMMAND : & str = r#"{} datafile where name='{}' get Version /value"# ;
80+ pub const WMIC_COMMAND_OS : & str = r#"{} os get osarchitecture"# ;
7981pub const REG_VERSION_ARG : & str = "version" ;
8082pub const REG_CURRENT_VERSION_ARG : & str = "CurrentVersion" ;
8183pub const REG_PV_ARG : & str = "pv" ;
@@ -93,6 +95,7 @@ pub const SINGLE_QUOTE: &str = "'";
9395pub const ENV_PROGRAM_FILES : & str = "PROGRAMFILES" ;
9496pub const ENV_PROGRAM_FILES_X86 : & str = "PROGRAMFILES(X86)" ;
9597pub const ENV_LOCALAPPDATA : & str = "LOCALAPPDATA" ;
98+ pub const ENV_SYSTEMROOT : & str = "SYSTEMROOT" ;
9699pub const ENV_X86 : & str = " (x86)" ;
97100pub const ARCH_X86 : & str = "x86" ;
98101pub const ARCH_AMD64 : & str = "amd64" ;
@@ -1073,8 +1076,11 @@ pub trait SeleniumManager {
10731076
10741077 if WINDOWS . is ( self . get_os ( ) ) {
10751078 if !escaped_browser_path. is_empty ( ) {
1076- let wmic_command =
1077- Command :: new_single ( format_one_arg ( WMIC_COMMAND , & escaped_browser_path) ) ;
1079+ let wmic_command = Command :: new_single ( format_two_args (
1080+ WMIC_COMMAND ,
1081+ & get_wmic ( ) ,
1082+ & escaped_browser_path,
1083+ ) ) ;
10781084 commands. push ( wmic_command) ;
10791085 }
10801086 if !self . is_browser_version_unstable ( ) {
@@ -1549,6 +1555,19 @@ pub fn format_three_args(string: &str, arg1: &str, arg2: &str, arg3: &str) -> St
15491555 . replacen ( "{}" , arg3, 1 )
15501556}
15511557
1558+ pub fn get_wmic ( ) -> String {
1559+ let system_root = env:: var ( ENV_SYSTEMROOT ) . unwrap_or_default ( ) ;
1560+ let wmic_default_path = format_one_arg ( WMIC_DEFAULT_PATH , & system_root) ;
1561+ let wmic_path = Path :: new ( & wmic_default_path) ;
1562+ if !wmic_path. exists ( ) {
1563+ return match which ( WMIC ) {
1564+ Ok ( path) => path_to_string ( & path) ,
1565+ Err ( _) => WMIC . to_string ( ) ,
1566+ } ;
1567+ }
1568+ path_to_string ( wmic_path)
1569+ }
1570+
15521571// ----------------------------------------------------------
15531572// Private functions
15541573// ----------------------------------------------------------
0 commit comments