[英]Backgroundwork DoWork process not running after installing application
我有一個使用installshield安裝的應用程序。 該應用程序在調試過程中以及使用VS發布時運行良好,但是當我運行已安裝的版本時,DoWork進程不會受到攻擊,我似乎可以確定原因。
我已經在下面添加了代碼,如您所見,我已經添加了將代碼寫入文本文件進行調試的代碼。
條目“ Line:278”直接記錄在“ Line:281”之前。 問題在於DoWork應該在這些代碼之間運行,並記錄這些代碼行的條目。 在調試過程中,一切正常。
從這些日志中可以明顯看出,運行已安裝的版本時,從未打過DoWork(包含主要代碼)。
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
File.AppendAllText("C:\\Users\\Jamie\\Desktop\\errorloghardware.txt", "Line:278" + Environment.NewLine);
backgroundWorker1.RunWorkerAsync(txtTerminal.Text);
File.AppendAllText("C:\\Users\\Jamie\\Desktop\\errorloghardware.txt", "Line:281" + Environment.NewLine);
}
private void button2_Click(object sender, EventArgs e)
{
this.backgroundWorker1.CancelAsync();
}
private void MainForm_Load(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync(txtTerminal.Text);
File.AppendAllText("C:\\Users\\Jamie\\Desktop\\errorloghardware.txt","Line:292" + Environment.NewLine);
}
DoWork流程在其第一行中包含一個記錄行號的條目,因此我認為在此處發布冗長的方法沒有什么意義。
您的后台工作人員DoWork中可能會有例外。 檢查RunWorkerCompleted事件處理程序中的e.Error
屬性。
您真的有硬編碼的目錄引用嗎? 您應該改為執行以下操作:
Environment.GetFolderPath(Environment.SpecialFolder.Desktop))
使用InstallShield創建安裝程序並不重要。 重要的是,您需要了解應用程序的確切依賴關系,並在部署邏輯中進行處理。 如果您對DLL有依賴性,請確保部署它。
在這種情況下,假設存在某個文件夾並且登錄的用戶可以訪問該文件夾是不合適的。
我想這將是找到錯誤的方法。否則工作尚未完成
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error == null)
{
richBox1.Text=ex.Message;
}else{
try{
File.AppendAllText("C:\\Users\\Jamie\\Desktop\\errorloghardware.txt", "Line:278" + Environment.NewLine);
reset_all_variables()
backgroundWorker1.RunWorkerAsync(txtTerminal.Text);
File.AppendAllText("C:\\Users\\Jamie\\Desktop\\errorloghardware.txt", "Line:281" + Environment.NewLine);
}catch (Exception ex)
{
richBox1.Text=ex.Message;
}
}
使用互斥鎖同步對文件的訪問。 當您嘗試從后台任務寫入文件時,文件可能正從主要任務繁忙。 或者只是定義全局Stream
對象並使其保持打開狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.