これを行うために2つの簡単なスクリプトを作成するにはどうすればよいですか。
Wow64DisableWow64FsRedirection
フォルダリダイレクトを無効にし、プログラムをインストールしてから、再度アクティブにします。
これを行うために2つの簡単なスクリプトを作成するにはどうすればよいですか。
Wow64DisableWow64FsRedirection
フォルダリダイレクトを無効にし、プログラムをインストールしてから、再度アクティブにします。
関数を呼び出したスレッドにのみ影響するため、意味がない場合は、Inline :: C、Win32 :: API、またはXSモジュールを使用します。
script.pl
:
use Win32API::Wow64FsRedirection qw( :ALL );
my $saved = Wow64Disable()
or die("Wow64Disable: $^E\n");
# ...
Wow64Revert($saved)
or die("Wow64Revert: $^E\n");
Win32API/Wow64FsRedirection.pm
:
package Win32API::Wow64FsRedirection;
use strict;
use warnings;
use feature qw( state );
use Exporter qw( import );
use Win32::API qw( );
our @EXPORT_OK = qw( Wow64Disable Wow64Revert );
our %EXPORT_TAGS = ( ALL => \@EXPORT_OK );
# On success, returns value to pass to Wow64Revert. This value will be true.
# On error, returns false and sets $^E.
sub Wow64Disable {
state $Wow64DisableWow64FsRedirection = Win32::API->new(
'kernel32', 'Wow64DisableWow64FsRedirection', 'P', 'L',
);
my $OldValue_buf = pack('L', 0);
$Wow64DisableWow64FsRedirection->Call($OldValue_buf)
or return undef;
return unpack('L', $OldValue_buf) || "0 but true";
}
# On success, returns true.
# On error, returns false and sets $^E.
sub Wow64Revert {
my ($OldValue) = @_;
state $Wow64RevertWow64FsRedirection = Win32::API->new(
'kernel32', 'Wow64RevertWow64FsRedirection', 'N', 'L',
);
return $Wow64RevertWow64FsRedirection->Call($OldValue);
}
1;
関数を呼び出したスレッドにのみ影響するため、スクリプトからそれを行うことは無意味です。スクリプト以外には影響しません。