.NET Framework 時代のデバイスマネージャーは、以下のようなコードで呼び出されていたと思います。
Process.Start("devmgmt.msc");
.NET6 や .NET7 が現れる現在だと上記のコードは例外が発生してエラーになります。
An error occurred trying to start process 'devmgmt.msc' with working directory 'C:\Users...\bin\Debug\net6.0-windows10.0.17763.0'. The specified executable is not a valid application for this OS platform.
指定された実行は、OS プラットフォームで有効なアプリケーションではありません、というような感じでしょうか。実際は、Windows OS で実行しているので「そんな馬鹿な!」って感じでエラーメッセージも十分機能しているとは言えない状態です。
解決
以下のコードを実行します。ただし、アプリケーションを「管理者」として実行する必要があります。
var processStartInfo = new ProcessStartInfo { FileName = "mmc.exe", Arguments = "devmgmt.msc" }; var process = new Process { StartInfo = processStartInfo }; process.Start();
従来は、特にアプリケーション権限のような要件は、必要としていなかったように思います。(違っていたらすいません。忘却しています)
なので、今回の問題の根本的な要点は、セキュリティ的な都合ではないかと思いました。確かに、どんなアプリケーションからでも mmc.exe
のサービスに対して簡単にアクセスできてしまうというのは、セキュリティ的な視点では面白くないのかもしれないです。
プラスα
Process.Start()
を呼び出す前に、アプリケーションが管理者の権限を有しているかどうかを確認して、管理者 (Administrator) のときだけコントロールを有効にする、または、実行を可能にするような安全対策をしておけばよいと思います。
public bool HasRoleAdministrator { get { var identity = WindowsIdentity.GetCurrent(); var principal = new WindowsPrincipal(identity); return principal.IsInRole(WindowsBuiltInRole.Administrator); } }