2

私が作成した Excel アドインの git リポジトリがあるので、パスは "C:\Program Files\Microsoft Office 15\root\office15\Library\BTRTools" です (その「ライブラリ」パスは、Excel アドインの必須インストール親です。それらが適切に機能するための設定であるため、変更することはできません)。Win7 と Win8.1 の両方で UAC をオンにしています。Win7 ではすべて正常に動作しますが、Win8.1 では基本的に「すべてが変更されました」というステータスが表示されます (ただし、最初に「削除済み」として言及され、その後「追跡されていない」と同じステータスで再び言及された奇妙なファイルもあります。リポジトリは本当に「クリーン」、gitステータスの表示にもかかわらず、プルしたり、リセットしたりできません-ハードなど。

「管理者として実行」オプションを使用して「Console2」(git bash コマンドを発行するアプリ) を実行すると、すべて正常に動作し、ステータスはクリーンです (変更はリストされていません)。そして、プルやその他のコマンドを正しく実行できます。

Win7 と Win8.1 の両方で、ユーザーに BTRTools フォルダーへのフル アクセス権を手動で付与し (両方の管理者グループに既に属していますが)、Console2 が実際に Win8.1 でローカル ユーザーとして実行されていることを確認しました。 .

以前にこの問題を経験した人はいますか?「管理者として実行」モードで Console2 を常に実行する (プロンプトを表示する) ことなく、Win8.1 で Console2/git を適切に動作させる方法についてのアイデアはありますか?

前もって感謝します。

アップデート

特定の条件下でWin7で同じ動作をすることを発見しました。ac# Process/ProcessStartInfoを作成して実行することで、いくつかの git コマンドをバッチ処理するスクリプトを作成しましたが、Win8.1 Console2 と同じ動作を示していました。Win7 コンソールと Win7 スクリプト (つまり git status) でまったく同じコマンドを直接呼び出すと、2 つの異なる結果が表示されました。

スクリプト (LINQPad で作成) は現在のユーザーとして実行されていましたが、Process/ProcessInfoを作成して起動したときに、別のユーザーで実行されていたと思います。資格情報を提供することで、スクリプトでこの問題を修正できました

p.UserName = Environment.UserName;
p.Password = new System.Security.SecureString();
foreach( var c in password.ToCharArray() )
{
    p.Password.AppendChar( c );
}

注: Win7 と Win8.1 の両方で「my」ユーザーのセキュリティ グループ/設定が同じであるように見えることを確認しました (管理者グループの一部)。

更新: Get-ACL 出力

Get-ACL | を実行しました。両方のマシンの /BTRTools ディレクトリにある format-list。唯一の違いは、Win8 には基本的にすべてのフォルダに対して「アプリケーション パッケージ権限」があり、Win7 にはなかったということです。それが何かを示唆しているかどうかはわかりません。

更新:解決済み

私を正しい方向に向けてくれた@ian-boydに感謝します。Console2/Git が正常に動作する Win7 マシンで、次のファイルがあることを発見しました。

C:\Users\terry.aney\AppData\Local\VirtualStore\Program Files\Microsoft Office 15\root\office15\Library\BTRTools.git\index

いつ作成されたものかはわかりません。それを削除すると、Win7 の Console2/Git が、Win8 が示していた動作と同じように「失敗」し始めました。Win7 で復元し、Win8 にコピーしたところ、Console2/Win8 も正しく動作するようになりました。もっと大きな戦いがあるので、先に進みます。これはよくわかりませんが、補足として、私が試したいくつかの手順を次に示します

  • このページごとにユーザー グループの \Git インストール ディレクトリへの完全なファイル/ディレクトリ アクセスを設定する
  • #1 の同じページごとに、Virtualize のファイルとレジストリの書き込みエラーをユーザーごとの場所にオフにします。
  • ユーザー グループの \Library ディレクトリへのフル ファイル/ディレクトリ アクセスを設定します。

これを処理する「正しい」方法について誰かが意見を持っている場合、私はすべて耳にします。

4

2 に答える 2

0

私の推測では、Git がアクセスできない場所にファイルを書き込もうとしたのです。

次に Windows は、書き込みを別の場所にリダイレクトすることで、バグのある Git を維持しようとします。あなたのチェック

%AppData%\Local\VirtualStore

リダイレクトされた書き込み用のフォルダー。例えば:

C:\Users\Ian\AppData\Local\VirtualStore\Program Files\Microsoft Office 15\root\office 15\Library

私の推測では、そこにファイルが見つかるでしょう。

正しく作成された Windows アプリケーションには、失敗した書き込みをリダイレクトしないように Windows に要求する組み込みオプションが含まれます。しかし、Git は正しく作成された Windows アプリケーションではないと思います。

ボーナスおしゃべり

Windows Vista でのユーザー アカウント制御の理解と構成から

ユーザー アカウント制御: ユーザーごとの場所へのファイルとレジストリの書き込みエラーを仮想化します。

この設定は、32 ビット アプリケーションの仮想化設定を定義します。仮想化は 64 ビット アプリケーションには適用されません。

構成オプション:

  • 有効 - マニフェスト ファイルを持たない 32 ビット アプリケーションが、Program Files ディレクトリなどの保護された場所に書き込もうとすると、仮想化によって、すべてのユーザーがアクセスできるファイル システムとレジストリ内の場所にそれらの操作がリダイレクトされます。この設定により、標準ユーザーは、これまでプログラムを実行するユーザーが管理者である必要があった Windows Vista 以前のアプリケーションを実行できるようになります。
  • 無効 - マニフェスト ファイルを持たない 32 ビット アプリケーションが Program Files ディレクトリなどの保護された場所に書き込もうとすると、書き込みは失敗し、アプリケーションは警告なしで実行に失敗します。

デフォルト値: 有効

推奨事項: UAC に完全に準拠していないソフトウェアを実行する必要がある環境では、この設定を有効のままにしてください。アプリケーション マニフェスト ファイルまたはアプリケーション データベース エントリのない 32 ビットの非管理アプリケーションは、UAC に準拠していません。多くの企業は、Windows Vista より前のソフトウェアを実行する必要があるため、この設定をEnabledに構成しておく必要があります。

于 2014-07-31T21:09:17.010 に答える