[英]How to execute batch file on the same executable as the “main” C# application
[英]How to discover the main executable file of an application
我正在以無人值守的方式以編程方式安裝應用程序(沒什么特別的,只是傳遞參數“/VERYSILENT /SUPPRESSMSGBOXES /NORESTART”如果是 exe,或者“msiexec /qn /i ALLUSERS=1”而是 msi 文件)。
問題是安裝成功后我想打開剛剛安裝的應用程序。 然后我正在尋找一種方法來發現我剛剛安裝的應用程序的主要可執行文件。
我試過監控硬盤並檢查注冊表,但我沒有發現任何強大和通用的東西。
我怎樣才能做到這一點?
我找到了一個合適的方法,我希望這可以幫助其他人。
Windows 10 中有一個特殊的隱藏外殼對象,它列出了所有以這種方式打開的應用程序(UWP 和常規):
然后是以編程方式獲取列表並檢查安裝后發生了什么變化的問題。
這是通過這種方式實現的(需要這個nuget 包):
var appsFolderId = new Guid("{1e87508d-89c2-42f0-8a7e-645a0f50ca58}");
IKnownFolder appsFolder = KnownFolderHelper.FromKnownFolderId(appsFolderId);
foreach (var app in appsFolder)
{
Console.WriteLine($"{app.Name} {app.ParsingName}");
}
app.Name 是應用程序的名稱,app.ParsingName 是可用於打開應用程序的名稱:
System.Diagnostics.Process.Start("explorer.exe", @" shell:appsFolder\" + app.ParsingName);
如果需要,您可以通過此屬性獲取應用程序的圖標:
app.Thumbnail.ExtraLargeBitmapSource
歸功於此答案的解決方案。
然后現在是存儲當前列表的問題,安裝新應用程序並檢查該列表上的更改。 同樣正如答案所暗示的那樣; 您可以偵聽該 shellobject 上的更改以在更改生效時獲得通知,如下所示:
ShellObjectWatcher watcher = new ShellObjectWatcher(appsFolder, false);
watcher.AllEvents += <Your_events_handler>;
watcher.Start();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.