ฉันรู้ว่าทำไมสิ่งนี้ถึงเกิดขึ้น และฉันรู้ว่าฉันต้องแก้ไขโปรแกรมเพื่อรองรับ Windows 7/8
ดี ฉันจะพยายามไม่ทุบตีม้าตาย (ถึงแม้ฉันจะชอบเฆี่ยนบ่อยๆ เพราะมีคนเข้าใจผิดมากมาย) ฉันจะชี้ให้เห็นว่าการที่โปรแกรมของคุณทำงานได้อย่างถูกต้อง แม้แต่ใน Windows รุ่นเก่าๆ ก็เป็นผลที่โชคดีของข้อบกพร่องที่แฝงอยู่ โฟลเดอร์ "Program Files" ไม่เคยมีไว้เพื่อให้สามารถเขียนได้ คุณไม่ได้เพียงแค่แก้ไข "ปัญหา" โง่ๆ ของ Windows เวอร์ชันใหม่เท่านั้น นี่คือสิ่งที่ควรทำตั้งแต่ต้น
ฉันรู้ว่าโฟลเดอร์ appdata ภายใต้ "ผู้ใช้" เป็นสถานที่ที่แนะนำในการจัดเก็บฐานข้อมูล/ไฟล์คำ/ข้อมูลสำรอง อย่างไรก็ตาม ในระบบของฉันที่ถูกซ่อนอยู่ และฉันต้องการให้ผู้ใช้เข้าถึงได้ง่าย (ไม่ซ่อนอยู่) ดังนั้นฉันจึงนึกถึงโฟลเดอร์ MyDocuments?
ฉันรู้ว่ามันซับซ้อน ดังนั้นขอฉันดูว่าฉันสามารถพยายามทำให้ง่ายที่สุดเท่าที่จะเป็นไปได้ได้หรือไม่
โฟลเดอร์ "ข้อมูลแอป" มีไว้สำหรับข้อมูลที่แอปพลิเคชันของคุณใช้ภายใน และ ไม่ได้ ตั้งใจให้ผู้ใช้มองเห็นหรือจัดการโดยตรง
โฟลเดอร์ "My Documents" มีไว้สำหรับทุกสิ่งที่ผู้ใช้ควรมองเห็นและจัดการได้โดยตรง กล่าวอีกนัยหนึ่งคือข้อมูล ผู้ใช้ แทนที่จะเป็นข้อมูล แอปพลิเคชัน
นอกจากนี้ยังมีรูปแบบต่อผู้ใช้และแบบสากลของโฟลเดอร์ทั้งสองประเภทนี้ด้วย ในกรณีของ "ข้อมูลแอป" รูปแบบต่อผู้ใช้จะถูกแบ่งย่อยเพิ่มเติมเป็นภาษาท้องถิ่น (ซึ่งอยู่บนเครื่องเฉพาะที่เท่านั้น) และการโรมมิ่ง (ซึ่งติดตามบัญชีผู้ใช้ไปยังเครื่องใด ๆ บนเครือข่ายที่เธอเข้าสู่ระบบ)
ดังนั้นหากคุณต้องการให้ไฟล์ "เข้าถึงได้ง่ายสำหรับผู้ใช้" คุณควรใช้โฟลเดอร์ "My Documents" อย่างแน่นอน นั่นคือสิ่งที่มีไว้สำหรับ—เอกสารผู้ใช้
เหตุผลที่ว่าทำไมกฎที่ซับซ้อนเหล่านี้ถึงมีอยู่ก็เนื่องมาจากแอพพลิเคชั่นที่ไม่เหมาะสมของผู้จำหน่ายยอดนิยมอย่าง Microsoft และ Adobe มีแนวโน้มที่จะทิ้งขยะลงในโฟลเดอร์ "My Documents" ของผู้ใช้ ซึ่งเป็นสิ่งที่ผู้ใช้ไม่เคยตั้งใจจะโต้ตอบด้วย โดยตรง. จากนั้นผู้ใช้จะเปิดโฟลเดอร์เอกสารของตนและเห็นสิ่งต่างๆ มากมายที่พวกเขาไม่เคยใส่ไว้ที่นั่น "สิ่งเหล่านี้คืออะไร สิ่งเหล่านี้ไม่ใช่ของฉัน เอกสารของฉันอยู่ที่ไหน" แม่ของฉันเพิ่งถามฉันเมื่อสัปดาห์ที่แล้วเมื่อฉันอัปเดตพีซีของเธอ
ยังไม่ชัดเจนว่าจะค้นหา MyDocuments ได้อย่างไร ใครสามารถช่วยได้บ้าง?
จาก VB6? วิธีง่ายๆ คือวิธีที่ Bob และ ทำเครื่องหมายในคำถามที่คุณดู สิ่งนี้เกี่ยวข้องกับการสร้างวัตถุ Shell และค้นหาตำแหน่งของโฟลเดอร์ที่คุณสนใจ
ส่วนที่ขาดหายไปคือค่าคงที่ที่สอดคล้องกับโฟลเดอร์ "My Documents" คุณจะพบรายการค่าคงที่ทั้งหมดได้ที่นี่ . สิ่งที่คุณต้องการชื่อ ssfPERSONAL
(เพราะในสมัยก่อนเมื่อ API นี้ถูกสร้างขึ้น Windows ยังไม่เป็นมิตรและยังไม่มีการประดิษฐ์ชื่อ "เอกสารของฉัน") ซึ่งมีค่า &H05
ดังนั้นโค้ดจะมีลักษณะดังนี้:
Const ssfPERSONAL = &H05
Dim strMyDocsPath As String
strMyDocsPath = CreateObject("Shell.Application").NameSpace(ssfPERSONAL).Self.Path
หากฉันต้องการใช้บางอย่างเช่น MyDocuments\CompanyName หรือแม้แต่โฟลเดอร์ Appdata ที่กล่าวถึงในลิงก์ด้านบน ฉันจะบอกตัวช่วยสร้างแพ็คเกจ/การปรับใช้ให้ติดตั้งไฟล์ mdb และโฟลเดอร์ที่กล่าวถึงข้างต้นลงในโฟลเดอร์เฉพาะนี้ได้อย่างไร มีแมโครสำหรับโฟลเดอร์ Appdata หรือ MyDocuments ใน PDW ที่ฉันสามารถใช้ได้หรือไม่
ไม่มีอะไรที่ฉันสามารถเพิ่มได้มากนักโดยที่ Bob ไม่ได้พูดถึงในคำตอบของเขา นอกเหนือจากการแนะนำในขณะที่ คุณกำลังปรับปรุงแอปพลิเคชัน VB นี้ให้ทันสมัย นอกจากนี้คุณยังพิจารณาที่จะทิ้ง PDW ที่ล้าสมัยไปให้กับตัวติดตั้งที่ดีกว่า
โดยส่วนตัวแล้ว ฉันเป็นแฟนตัวยงของ Inno Setup ซึ่ง เป็นยูทิลิตี้ตัวติดตั้งฟรีสำหรับแอพพลิเคชั่น Windows ที่มีคุณสมบัติมากกว่าที่คุณจะทำได้ มันทำงานได้ดีมากกับแอพพลิเคชั่น VB 6 ฉันใช้มันหลายครั้งเพื่อตัวเอง ฉันคิดว่ามันค่อนข้างใช้งานง่าย อย่างน้อยก็ในระดับพื้นฐาน รองรับการปรับแต่งขั้นสูงทุกประเภท และบางส่วนอาจยุ่งยากหากคุณเรียนรู้ไม่เก่งจากการอ่านเอกสารประกอบ แต่ทั้งหมดนี้ทำได้ดีมาก ฉันยังต้องสะดุดกับการเขียนโค้ด Delphi เพื่อปรับแต่งโปรเจ็กต์ Inno Setup!
ในการตั้งค่า Inno คุณจะเข้าถึงเส้นทางไปยังโฟลเดอร์ระบบโดยใช้ค่าคงที่ที่กำหนดไว้ล่วงหน้า. ตัวอย่างเช่น {userdocs}
และ {commondocs}
สิ่งเหล่านี้ทำงานเหมือนกับมาโครใน PDW (หากไม่เหมือนกันทุกประการเป็นเวลานาน)
แน่นอนว่า วิธีนี้ยังคงไม่สามารถแก้ไขปัญหาที่ Bob ชี้ให้เห็นได้อย่างถูกต้อง: แนวคิดของโฟลเดอร์ "My Documents" ของผู้ใช้ไม่สมเหตุสมผลนักสำหรับผู้ติดตั้ง แน่นอนคุณสามารถเข้าถึงโฟลเดอร์ "เอกสารของฉัน" ส่วนกลาง (สาธารณะ) ได้เนื่องจากมีการแชร์ระหว่างผู้ใช้ทั้งหมด แต่นี่อาจไม่ใช่โฟลเดอร์ที่คุณต้องการ โปรแกรมติดตั้งควรจะสามารถเรียกใช้โดยผู้ใช้ที่มีสิทธิ์เพียงพอ และอันที่จริงแล้ว นี่มักจะเป็นบัญชีผู้ดูแลระบบที่แตกต่างจากบัญชีผู้ใช้ทั่วไปที่ใช้ในการเรียกใช้แอปพลิเคชันของคุณ คุณไม่สามารถถือว่าบัญชีผู้ใช้ใดบัญชีหนึ่งในระหว่างการตั้งค่า และการออกแบบของคุณจะต้องคำนึงถึงสิ่งนี้
สำหรับฉันดูเหมือนว่าแนวทาง "เทมเพลต" จะดีสำหรับคุณ ชุดไฟล์ทั้งหมดที่ใช้ในการตั้งค่าบัญชีผู้ใช้ใหม่สามารถจัดเก็บไว้ในโฟลเดอร์ "Program Files" นี่เป็นสถานที่ที่ดีสำหรับที่นี่จริงๆ เนื่องจากมีการป้องกันอย่างดีจากการแก้ไขที่ผิดพลาด และเนื่องจากคุณจะอ่านจากที่นั่นเท่านั้น คุณจึงรับประกันได้ว่าจะได้รับสิทธิ์ที่จำเป็น เมื่อแอปพลิเคชันเปิดตัวเป็นครั้งแรกภายใต้บัญชีผู้ใช้ใหม่ แอปพลิเคชันอาจตรวจพบข้อเท็จจริงนี้และเสนอให้ตั้งค่าบัญชีผู้ใช้ใหม่เพื่อใช้กับแอปพลิเคชัน ณ จุดนี้ คุณทราบว่าคุณกำลังใช้งานบัญชีผู้ใช้ที่ถูกต้อง ดังนั้นคุณสามารถใช้โค้ดด้านบนเพื่อค้นหาตำแหน่งของโฟลเดอร์ "My Documents" ของผู้ใช้รายนั้นได้ ด้วยโครงสร้างโฟลเดอร์ที่ต้องการซึ่งตั้งค่าไว้ในไดเร็กทอรีย่อยของโฟลเดอร์แอปพลิเคชันของคุณใน "Program Files" การตั้งค่าบัญชีผู้ใช้ใหม่อาจทำได้ง่ายเพียงแค่คัดลอกทับโฟลเดอร์นั้น หากคุณต้องการรวบรวมข้อมูลจากผู้ใช้หรือเสนอตัวเลือกการปรับแต่ง คุณสามารถเขียน "ตัวช่วยสร้างการเรียกใช้ครั้งแรก" เพียงเล็กน้อย
person
Cody Gray
schedule
20.03.2013