นี่คือสิ่งที่ฉันพบว่าทำงานได้เพื่อให้สามารถรับตำแหน่งโฟลเดอร์ที่ปรับใช้แล้วของแอปพลิเคชัน Clickonce ของฉันและไม่ได้ถูกกล่าวถึงที่ใดก็ตามที่ฉันเห็นในการค้นหาของฉันสำหรับสถานการณ์เฉพาะที่คล้ายกันของฉัน:
- แอปพลิเคชั่น clickonce นั้นได้รับการปรับใช้กับโฟลเดอร์เครือข่าย LAN ของ บริษัท
- แอปพลิเคชัน Clickonce ถูกตั้งค่าให้พร้อมใช้งานออนไลน์หรือออฟไลน์
- URL การติดตั้ง Clickonce ของฉันและอัปเดต URL ในคุณสมบัติโครงการของฉันไม่มีอะไรระบุ กล่าวคือไม่มีตำแหน่งที่ตั้งแยกต่างหากสำหรับการติดตั้งหรือการปรับปรุง
- ในตัวเลือกการเผยแพร่ของฉันฉันได้สร้างทางลัดบนเดสก์ท็อปสำหรับแอปพลิเคชัน Clickonce
- โฟลเดอร์ที่ฉันต้องการหาพา ธ สำหรับตอนเริ่มต้นคือโฟลเดอร์ที่ฉันต้องการเข้าถึงได้โดยแอปพลิเคชันรุ่น DEV, INT และ PROD โดยไม่ต้องเข้ารหัสฮาร์ดไดรฟ์
นี่คือภาพของกรณีการใช้งานของฉัน:
- โฟลเดอร์ที่บรรจุกล่องสีน้ำเงินเป็นที่ตั้งไดเรกทอรีของฉันสำหรับแอพพลิเคชั่นของแต่ละสภาพแวดล้อม
- โฟลเดอร์กล่องแดงเป็นไดเรกทอรีที่ฉันต้องการหาพา ธ (ซึ่งต้องได้รับตำแหน่งโฟลเดอร์ที่ปรับใช้ของแอป "MyClickOnceGreatApp_1_0_0_37" ซึ่งเป็นเหมือนกับ OP)
ฉันไม่พบข้อเสนอแนะใด ๆ ในคำถามนี้หรือความคิดเห็นของพวกเขาเพื่อทำงานในการส่งคืนโฟลเดอร์ที่มีการใช้งานแอปพลิเคชัน clickonce (ซึ่งฉันจะย้ายไปสัมพันธ์กับโฟลเดอร์นี้เพื่อค้นหาโฟลเดอร์ที่น่าสนใจ) ไม่มีการค้นหาทางอินเทอร์เน็ตหรือคำถาม SO อื่น ๆ ที่เกี่ยวข้องทำให้เกิดคำตอบอย่างใดอย่างหนึ่ง
คุณสมบัติที่แนะนำทั้งหมดอาจล้มเหลวเนื่องจากวัตถุ (เช่น ActivationUri) เป็นโมฆะหรือชี้ไปที่โฟลเดอร์แอปที่ติดตั้งแคชของพีซีในระบบ ใช่ฉันสามารถจัดการวัตถุที่เป็นโมฆะได้อย่างสง่างามโดยการตรวจสอบ IsNetworkDeployed - นั่นไม่ใช่ปัญหา - แต่น่าแปลกใจที่ IsNetworkDeployed คืนค่าเท็จแม้ว่าในความเป็นจริงฉันมีตำแหน่งโฟลเดอร์ที่ติดตั้งเครือข่ายสำหรับแอปพลิเคชัน Clickonce นี่เป็นเพราะแอปพลิเคชันทำงานจากบิตที่แคชในเครื่อง
วิธีแก้คือดูที่:
AppDomain.CurrentDomain.BaseDirectory
เมื่อแอปพลิเคชันถูกเรียกใช้ภายใน Visual Studio ขณะที่ฉันพัฒนาและ
System.Deployment.Application.ApplicationDeployment.CurrentDeployment.UpdateLocation
เมื่อมันกำลังดำเนินการตามปกติ
System.Deployment.Application.ApplicationDeployment.CurrentDeployment.UpdateLocation
ส่งคืนไดเรกทอรีเครือข่ายที่ใช้งานแอปพลิเคชัน Clickonce ของฉันอย่างถูกต้องในทุกกรณี นั่นคือเมื่อมีการเปิดตัวผ่าน:
- setup.exe
- MyClickOnceGreatApp.application
- ทางลัดบนเดสก์ท็อปที่สร้างขึ้นเมื่อติดตั้งและเปิดใช้แอปพลิเคชันเป็นครั้งแรก
นี่คือรหัสที่ฉันใช้เมื่อเริ่มต้นแอปพลิเคชันเพื่อรับเส้นทางของโฟลเดอร์ WorkAccounts การรับโฟลเดอร์แอปพลิเคชั่นที่ปรับใช้นั้นง่ายมากโดยไม่ต้องเดินไปที่ไดเรกทอรีหลัก:
string directoryOfInterest = "";
if (System.Diagnostics.Debugger.IsAttached)
{
directoryOfInterest = Directory.GetParent(Directory.GetParent(Directory.GetParent(AppDomain.CurrentDomain.BaseDirectory).FullName).FullName).FullName;
}
else
{
try
{
string path = System.Deployment.Application.ApplicationDeployment.CurrentDeployment.UpdateLocation.ToString();
path = path.Replace("file:", "");
path = path.Replace("/", "\\");
directoryOfInterest = Directory.GetParent(Directory.GetParent(path).FullName).FullName;
}
catch (Exception ex)
{
directoryOfInterest = "Error getting update directory needed for relative base for finding WorkAccounts directory.\n" + ex.Message + "\n\nUpdate location directory is: " + System.Deployment.Application.ApplicationDeployment.CurrentDeployment.UpdateLocation.ToString();
}
}