我目前正在 Visual Studio Community 2022 上的 WinForms 上開發一個程式。該程式必須使用 File.Exists() 檢查安裝目錄中是否存在檔案,但是有一個我似乎無法解決的非常奇怪的行為:當在VS2022上除錯(甚至在Release模式下運行)應用程式,該方法回傳的值為false(這是正確的,因為在運行該方法時該檔案不存在),但是在安裝應用程式時,它說檔案存在,即使它不存在,它甚至可以讀取該檔案的內容。這是代碼:
private static string AppPath = $@"{Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)}\eMA\eMA";
public async Task<JArray> GetVersionsJArrayFromComputer()
{
JArray versionsJArray = new JArray();
await Task.Run(async () =>
{
string path = AppPath;
if (!await CheckIfVersionJSONFileExists())
{
if (!await IsRunningAsAdmin())
{
await RunAsAdmin();
Environment.Exit(0);
}
else
{
await SaveVersionJSONFile(await SetVersionsJArrayFromComputer());
}
}
string versionFilePath = $@"{path}\version.json";
string versionFile = File.ReadAllText(versionFilePath);
versionsJArray = (JArray)JsonConvert.DeserializeObject(versionFile);
});
return versionsJArray;
}
private static async Task<bool> CheckIfVersionJSONFileExists()
{
bool fileExists = false;
await Task.Run(() =>
{
string path = AppPath;
string fileName = $@"{path}\version.json";
fileExists = File.Exists(fileName);
});
return fileExists;
}
我創建了一些 MessageBoxes 來嘗試在應用程式已安裝時對其進行除錯,這就是它所說的:

這是它從檔案中讀取的內容(理論上,如果檔案不存在,它不應該有任何內容):

而且我真的不知道為什么它會在除錯時說該檔案不存在,然后在安裝時它存在。任何幫助將非常感激。
uj5u.com熱心網友回復:
感謝所有評論的人。結果證明是 UAC 虛擬化問題(當時我不知道存在)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/509987.html
上一篇:在UserControl中設定計時器的時間間隔會導致整個專案和VisualStudio凍結
下一篇:如何畫出這些點?
