Win32-Exe
view release on metacpan or search on metacpan
lib/Win32/Exe/Manifest.pm view on Meta::CPAN
if($setval eq 'none') {
# delete element and collapse tree if empty
$self->_delete_collapse_tree($ref, [ qw(application windowSettings dpiAware) ] );
} else {
# create value if it does not exist
my $writeref = $self->_get_first_tree_node($ref, [ qw(application windowsSettings) ], $namealias );
$writeref->{dpiAware} = [ { $elementvaluename => $setval } ];
# add xmlns for windowsSettings
my $xmlns = $schema->{elementtypes}->{windowsSettings}->{attributes}->{xmlns}->{default};
$ref->{application}->[0]->{windowsSettings}->[0]->{xmlns} = $xmlns;
}
my $errors = $self->validate_errors;
croak('Manifest XML had errors after dpiAware setting: ' . $errors) if $errors;
}
sub get_dpiaware {
my $self = shift;
my $ref = $self->refhash()->{assembly}->[0];
my $elementvaluename = $self->default_content;
return 'none' if(not exists($ref->{application}->[0]->{windowsSettings}->[0]->{dpiAware}->[0]->{$elementvaluename}));
return $ref->{application}->[0]->{windowsSettings}->[0]->{dpiAware}->[0]->{$elementvaluename};
}
=head2 Manifest Information
=head3 get_manifest_type
my $type = $manifest->get_manifest_type;
Returns the manifest type ( 'application' or 'assembly' );
=cut
sub get_manifest_type { $_[0]->{_w32_exe_datatype}; }
sub get_current_schema { $_[0]->{_w32_exe_schema}; }
sub set_current_schema {
my($self, $schema) = @_;
$self->{_w32_exe_schema} = $schema;
my $errors = $self->validate_errors;
croak('Manifest XML had errors following set schema: ' . $errors) if $errors;
}
sub default_xmldecl { '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' }
sub default_content { 'elementValue' }
sub get_parser_config {
my $self = shift;
my %config = (
KeepRoot => 1,
ForceArray => 1,
KeyAttr => {},
XMLDecl => $self->default_xmldecl,
ForceContent => 1,
ContentKey => $self->default_content,
# AttrIndent => 1,
);
return %config;
}
sub refhash { $_[0]->{_w32_exe_dataref}; }
sub merge_manifest {
my($self, $xml) = @_;
my $mergefest;
my $class = ref($self);
eval { $mergefest = $class->new($xml, $self->get_manifest_type); };
croak(qq(Merging $@)) if $@;
my $newref = $mergefest->refhash()->{assembly}->[0];
my $oldref = $self->refhash()->{assembly}->[0];
$self->_merge_element_merge('assembly', $oldref, $newref);
my $errors = $self->validate_errors;
croak('Manifest had errors after merging: ' . $errors) if $errors;
}
sub get_osname_from_osid {
my($self, $osid) = @_;
my $name = 'Unknown Windows Version';
$name = 'Windows Vista' if $osid =~ /e2011457-1546-43c5-a5fe-008deee3d3f0/;
$name = 'Windows 7' if $osid =~ /35138b9a-5d96-4fbd-8e2d-a2440225f93a/;
return $name;
}
sub get_osid_from_osname {
my($self, $name) = @_;
my $osid = undef;
$osid = '{e2011457-1546-43c5-a5fe-008deee3d3f0}' if(lc($name) eq 'windows vista');
$osid = '{35138b9a-5d96-4fbd-8e2d-a2440225f93a}' if(lc($name) eq 'windows 7');
return $osid;
}
sub _get_dependendency_index {
my($self, $name) = @_;
my $exref = $self->refhash()->{assembly}->[0];
return undef if not exists $exref->{dependency};
my $rval = undef;
my @existing = @{ $exref->{dependency} };
for(my $i = 0; $i < @existing; $i++) {
my $depname = $existing[$i]->{dependentAssembly}->[0]->{assemblyIdentity}->[0]->{name};
if($depname eq $name) {
$rval = $i;
last;
}
}
return $rval;
}
sub _get_first_tree_node {
my ($self, $ref, $paths, $namealias ) = @_;
my $newref = $ref;
while(my $path = shift(@$paths) ) {
$newref->{$path} = [{}] if(not exists($newref->{$path}));
$newref = $newref->{$path}->[0];
$newref->{elementnamespace} = $namealias if $namealias;
( run in 0.939 second using v1.01-cache-2.11-cpan-364913b4093 )