VistaでMinGWとmsysがうまく動かない (2)

ググった。

MinGW - User - environment hosed during upgrade

You can find such a manifest file on an archive of their mailing list:
http://article.gmane.org/gmane.os.cygwin/84762

Could you try the following:

1) Copy the following files from some recent Cygwin installation (or
create them based on the above link) to /bin in MSYS:

patch.exe.manifest
install.exe.manifest
install-info.exe.manifest

2) Type "touch /bin/install.exe /bin/install-info.exe /bin/patch.exe" in
MSYS.

Does this helps?

みんなうごいてるっぽいけど、うちはinstall.exeが動かない。

SourceForge.net: Log In to SourceForge.net

Include manifest files for Vista compatibility. Closes bug #1711379.
Thanks to Mark Bourne for the report and for supplying the fix.

これを入れてみたけどinstall.exeだけ動かない。

こうしたら動く

$ install
sh: /bin/install: Permission denied
$ mv /bin/install /bin/install-test
$ install-test
sh: /bin/install-test: Permission denied
$ mv /bin/install.exe.manifest /bin/install-test.exe.manifest
$ install-test
install-test: missing file operand
Try `install-test --help' for more information.

仕方がないのでこんな感じで解決

分かっていることは……

  1. ファイル名をinstall-testにして外部manifestで呼び出し元と同じ権限だと明示すると動いた
  2. .exe以外だとUACは反応しない

ということでこんなスクリプトを実行。

use File::Copy;
use strict;

our $MSYS = 'C:/msys/1.0';

if (-f $MSYS.'/bin/install-vista.exe') {
	exit(0);
}

move($MSYS.'/bin/install.exe', $MSYS.'/bin/install-vista.exe');

open(MANIFEST, '>'.$MSYS.'/bin/install-vista.exe.manifest') or die $!;
print MANIFEST <<'__EOT'
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <v3:trustInfo xmlns:v3="urn:schemas-microsoft-com:asm.v3">
    <v3:security>
      <v3:requestedPrivileges>
        <v3:requestedExecutionLevel level="asInvoker" />
      </v3:requestedPrivileges>
    </v3:security>
  </v3:trustInfo>
</assembly>
__EOT
;
close(MANIFEST);

open(INSTALL_WRAPPER, '>'.$MSYS.'/bin/install') or die $!;
print INSTALL_WRAPPER <<'__EOT'
#!/bin/sh
install-vista $@
__EOT
;
close(INSTALL_WRAPPER);
  1. /bin/install.exeを/bin/install-vista.exeへリネーム
  2. /bin/install というシェルスクリプト経由でinstall-vista.exeを呼び出す

という。

まとめ

ワケワカンネーヨ ゲイツクン(゜д゜)