VS2005で作ったデスクトップ系のプログラムは、Visual Studio Express 2013 for Windows Desktop で開くと自動的に変換され問題なく実行できた と書きました。(ここ)
ところが 手持ちのプロジェクトを順に変換したところ 『指定されたパスが見つかりません。・・・MSB3073:は コード 3 で終了しました。』 とのエラーメッセージが表示され EXE自体は作成されても 実行できないプロジェクトにぶつかりました。
WEBをググルと ビルド後イベントで 指定したコマンドがエラーになったらしい。とうの昔の話なので そんなことをやったかどうかの記憶すら忘れていました。(汗;;) 2013に変換する前のプロジェクトを VS2005で開いてみると ビルド後イベントとして
“$(DevEnvDir)….SDKv2.0binmt.exe” -manifest “$(ProjectDir)$(TargetName).exe.manifest” -outputresource:”$(TargetDir)$(TargetFileName)”;#1
のコマンドが入っています。
これって一体??こんな難しいコマンド自分で作れる訳ないし・・
コマンドの一部を使ってググルと あった!! ここを参照して管理者権限付きのEXEを作ったようだ。(自分でしたことながら すっかり忘却の彼方) その方法は次のようになります。
1.マニフェストファイルを作る
<?xml version=”1.0″ encoding=”UTF-8″ standalone=”yes”?>
<assembly xmlns=”urn:schemas-microsoft-com:asm.v1″ manifestVersion=”1.0″>
<assemblyIdentity version=”1.0.0.0″ processorArchitecture=”X86″ name=”Regist2″ type=”win32″/>
<trustInfo xmlns=”urn:schemas-microsoft-com:asm.v3″>
<security>
<requestedPrivileges>
<requestedExecutionLevel level=”requireAdministrator”/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
2.プロジェクトのプロパティダイアログを開いて ビルド後イベントとして マニフェストを埋め込む処理を追加する
“$(DevEnvDir)….SDKv2.0binmt.exe” -manifest “$(ProjectDir)$(TargetName).exe.manifest” -outputresource:”$(TargetDir)$(TargetFileName)”;#1
エラーメッセージで表示された 『指定されたパスが見つかりません。』とは ビルド後イベントに指定したコマンドの”$(DevEnvDir)….SDKv2.0binmt.exe” が 存在しないことを指しているようです。しかもExpressではプロジェクトのプロパティのダイアログでは ビルド後イベントの指定はできません。
プロジェクトファイルを開くと最後の方に次の記述が
<PropertyGroup>
<PostBuildEvent>”$(DevEnvDir)….SDKv2.0binmt.exe” -manifest “$(ProjectDir)$(TargetName).exe.manifest” -outputresource:”$(TargetDir)$(TargetFileName)”;#1
</PostBuildEvent>
</PropertyGroup>
そこで ”$(DevEnvDir)….SDKv2.0binmt.exe”の部分をmt.exeのパスをフルパスで指定すると 見事コンパイル成功!!!
管理者権限付きのEXEが生成されました。