TL; DR
ユーザーがファイルをダブルクリックまたは選択してEnter
Windowsエクスプローラー内からキーを押したときに実行される正確な低レベルのカーネルおよびOSプロセスは何ですか?
詳細
これはかなり奇妙な質問のように思えるかもしれませんが、Windowsエクスプローラーからファイルを開く際の非常に詳細な情報に興味があります。
Enter
具体的には、ユーザーがファイルをダブルクリックまたは選択してWindowsエクスプローラー内からキーを押したときに実行される正確な低レベルのカーネルおよびOSプロセスについて知りたいと思います。
私が尋ねる理由は、ユーザーがデータベースに保存されているメタデータに基づいてファイルを参照および検索できるようにするアプリケーションを持っているためです。ユーザーがOpen
私が提供したボタンをクリックすると、ルートファイルが選択されたファイルへのパスであるプロセスを開始します。また、これらのファイルはネットワーク共有上にあることにも言及する価値があります。
これは何年も機能していましたが、最近、私の会社が新しいActive Directoryサーバーに移行し、ごく少数のユーザー(1〜2%)のアプリケーションが壊れています。本当に奇妙なことに、これらのユーザーはこれを開くことができません。私のアプリケーションからファイルを取得しますが、その場所を参照してWindowsエクスプローラーから開くことができます。アプリケーションがファイルを開こうとすると、ファイルが見つからなかったことを示す非常に一般的な例外が発生します。
アプリケーションが使用しているパス(複数のファイルの場合)をトリプルチェックしましたが、パスが正しくありません。ファイルを開く前に、ユーザーがこれらのネットワークドライブに接続していることを確認しました。すべてが正しくセットアップされ、機能するはずですが、私のアプリケーション(またはSystem.Process
)はこれらのファイルを「見る」ことも開くこともできません。
Windowsエクスプローラーアプリケーションは、アプリケーション内から使用する場合とは異なる動作をSystem.Process
しますか?
答える前にコードを持っている必要がある人のために、ここに私がファイルを開くために使用する非常に簡潔なコードがあります。繰り返しになりますが、これは何年にもわたって機能しており、私が知っている限りでは、Windowsに.Net内からファイルを開かせる方法です。
//From my Button-Click Event...
string file = e.Cell.Value.ToString();
try
{
Process p = new Process();
p.StartInfo.FileName = file;
p.StartInfo.Verb = "Open";
p.Start();
}
catch (Exception ex)
{
MessageBox.Show("A problem has occurred while trying to open the doccument."
+ "Please make sure that the file below exists and that you have permission "
+ "to view it."
+ Environment.NewLine + Environment.NewLine
+ file
+ Environment.NewLine + "---------------" + Environment.NewLine +
ex.Message
);
//ex.Message states "The system cannot find the file specified"
}
もう一つ。私はSOでこの質問を見つけましたが、この質問には当てはまらない/当てはまらないはずです。私のアプリは、PDFといくつかのエンジニアリング図面ファイルを開こうとしているだけです。特別なことは何もありません。管理者アクセスは必要ありません。また、ほとんどのユーザーがこのメッセージを受け取ることはなく、ログインしてネットワークの場所を参照することでネットワーク上で自分自身を検証しているため、ユーザー認証は必要ないと思います。