@@ -711,38 +711,38 @@ fn load_resource_manifest(path: &Path, manifest: &ResourceManifest) -> Result<Ds
711711
712712 let mut capabilities: Vec < Capability > = vec ! [ ] ;
713713 if let Some ( get) = & manifest. get {
714- verify_executable ( & manifest. resource_type , "get" , & get. executable ) ;
714+ verify_executable ( & manifest. resource_type , "get" , & get. executable , path . parent ( ) . unwrap ( ) ) ;
715715 capabilities. push ( Capability :: Get ) ;
716716 }
717717 if let Some ( set) = & manifest. set {
718- verify_executable ( & manifest. resource_type , "set" , & set. executable ) ;
718+ verify_executable ( & manifest. resource_type , "set" , & set. executable , path . parent ( ) . unwrap ( ) ) ;
719719 capabilities. push ( Capability :: Set ) ;
720720 if set. handles_exist == Some ( true ) {
721721 capabilities. push ( Capability :: SetHandlesExist ) ;
722722 }
723723 }
724724 if let Some ( what_if) = & manifest. what_if {
725- verify_executable ( & manifest. resource_type , "what_if" , & what_if. executable ) ;
725+ verify_executable ( & manifest. resource_type , "what_if" , & what_if. executable , path . parent ( ) . unwrap ( ) ) ;
726726 capabilities. push ( Capability :: WhatIf ) ;
727727 }
728728 if let Some ( test) = & manifest. test {
729- verify_executable ( & manifest. resource_type , "test" , & test. executable ) ;
729+ verify_executable ( & manifest. resource_type , "test" , & test. executable , path . parent ( ) . unwrap ( ) ) ;
730730 capabilities. push ( Capability :: Test ) ;
731731 }
732732 if let Some ( delete) = & manifest. delete {
733- verify_executable ( & manifest. resource_type , "delete" , & delete. executable ) ;
733+ verify_executable ( & manifest. resource_type , "delete" , & delete. executable , path . parent ( ) . unwrap ( ) ) ;
734734 capabilities. push ( Capability :: Delete ) ;
735735 }
736736 if let Some ( export) = & manifest. export {
737- verify_executable ( & manifest. resource_type , "export" , & export. executable ) ;
737+ verify_executable ( & manifest. resource_type , "export" , & export. executable , path . parent ( ) . unwrap ( ) ) ;
738738 capabilities. push ( Capability :: Export ) ;
739739 }
740740 if let Some ( resolve) = & manifest. resolve {
741- verify_executable ( & manifest. resource_type , "resolve" , & resolve. executable ) ;
741+ verify_executable ( & manifest. resource_type , "resolve" , & resolve. executable , path . parent ( ) . unwrap ( ) ) ;
742742 capabilities. push ( Capability :: Resolve ) ;
743743 }
744744 if let Some ( SchemaKind :: Command ( command) ) = & manifest. schema {
745- verify_executable ( & manifest. resource_type , "schema" , & command. executable ) ;
745+ verify_executable ( & manifest. resource_type , "schema" , & command. executable , path . parent ( ) . unwrap ( ) ) ;
746746 }
747747
748748 let resource = DscResource {
@@ -768,15 +768,15 @@ fn load_extension_manifest(path: &Path, manifest: &ExtensionManifest) -> Result<
768768
769769 let mut capabilities: Vec < dscextension:: Capability > = vec ! [ ] ;
770770 if let Some ( discover) = & manifest. discover {
771- verify_executable ( & manifest. r#type , "discover" , & discover. executable ) ;
771+ verify_executable ( & manifest. r#type , "discover" , & discover. executable , path . parent ( ) . unwrap ( ) ) ;
772772 capabilities. push ( dscextension:: Capability :: Discover ) ;
773773 }
774774 if let Some ( secret) = & manifest. secret {
775- verify_executable ( & manifest. r#type , "secret" , & secret. executable ) ;
775+ verify_executable ( & manifest. r#type , "secret" , & secret. executable , path . parent ( ) . unwrap ( ) ) ;
776776 capabilities. push ( dscextension:: Capability :: Secret ) ;
777777 }
778778 let import_extensions = if let Some ( import) = & manifest. import {
779- verify_executable ( & manifest. r#type , "import" , & import. executable ) ;
779+ verify_executable ( & manifest. r#type , "import" , & import. executable , path . parent ( ) . unwrap ( ) ) ;
780780 capabilities. push ( dscextension:: Capability :: Import ) ;
781781 if import. file_extensions . is_empty ( ) {
782782 warn ! ( "{}" , t!( "discovery.commandDiscovery.importExtensionsEmpty" , extension = manifest. r#type) ) ;
@@ -803,7 +803,17 @@ fn load_extension_manifest(path: &Path, manifest: &ExtensionManifest) -> Result<
803803 Ok ( extension)
804804}
805805
806- fn verify_executable ( resource : & str , operation : & str , executable : & str ) {
806+ fn verify_executable ( resource : & str , operation : & str , executable : & str , directory : & Path ) {
807+ // check if executable has a relative path
808+ if !Path :: new ( executable) . is_absolute ( ) {
809+ // combine with directory and see if it exists
810+ let exe_path = directory. join ( executable) ;
811+ if exe_path. exists ( ) {
812+ return ;
813+ }
814+ info ! ( "{}" , t!( "discovery.commandDiscovery.executableNotFound" , resource = resource, operation = operation, executable = exe_path. to_string_lossy( ) ) ) ;
815+ return ;
816+ }
807817 if which ( executable) . is_err ( ) {
808818 info ! ( "{}" , t!( "discovery.commandDiscovery.executableNotFound" , resource = resource, operation = operation, executable = executable) ) ;
809819 }
0 commit comments