C#WinFormsアプリで、System.IO.Diagnostics.Process.Start(fileName)を使用してファイルを開きます。ファイルの種類は、.doc、.docx、.xls、.xlsx、.csv、.pdf、または.txtです。
これらのファイルを強制的に読み取り専用で開く方法はありますか?
プロセスを開始する前にファイルのファイル属性を設定し、それを開いたときにそれらを元に戻す必要があります。
例:
var attributes = File.GetAttributes(path);
File.SetAttributes(filePath, attributes | FileAttributes.ReadOnly);
System.IO.Diagnostics.Process.Start(fileName);
File.SetAttributes(filePath, attributes);
注:これにより、実際のファイルのファイル属性が変更されるため、この点に注意してください。
残念ながら、これを行う方法はファイルの種類によって異なります。
最適なオプションは、ProcessStartInfo.Verbsプロパティで、ファイルタイプの既知の動詞を確認することです。これは通常「OpenAsReadOnly」です。次に、その動詞を設定し、ProcessStartInfoを使用してプロセスを開始します。
適切な動詞を提供して処理するのはプログラム次第であるため、これはすべてのタイプのファイルで機能するとは限りません。
ファイルを一時的な場所にコピーしてから、一時ファイルを使用してプログラムを起動できますか?
次に、プロセスを監視し、その終了時に一時ファイルを削除しますか?
Process.Startは、そのファイルに関連付けられているプログラムを開始します。プログラムが読み取り専用として開く必要があることを示すコマンドライン引数をサポートしていない限り(またはOpenAsReadOnly動詞をサポートしている場合)、ファイルを読み取り専用として開くように指示することはできません。
ファイルを開く前に、ファイルのファイル属性を読み取り専用に設定することもできますが、それはあなたが望んでいることではないと思います。
登録されたアプリケーションに読み取り専用モードをサポートするスイッチ/オプションがあるかどうかによって異なります。その場合は、読み取り専用オプションを渡すことができます。あなたの場合、読み取り専用オプションがない場合、Process.Startは可能ではないと思います。