การติดตั้งแอป VB6 บน Windows XP, Windows 7, Windows 8

ฉันได้อ่านโพสต์เกี่ยวกับหัวข้อนี้นับไม่ถ้วน แต่ไม่สามารถเข้าใจเรื่องทั้งหมดได้ ฉันมีแอป VB6 เก่าที่เคยติดตั้งในโฟลเดอร์ในไดเรกทอรีราก ภายในโฟลเดอร์นั้นมีโฟลเดอร์ย่อย:
\data โฟลเดอร์ย่อยสำหรับฐานข้อมูลการเข้าถึง
\quotes โฟลเดอร์ย่อยที่ซึ่งผู้ใช้สร้างขึ้นเอกสารคำจะถูกจัดเก็บและ \backup< /strong> โดยที่โปรแกรมของฉันสำรองข้อมูลสำเนาของ mdb เป็นระยะ

มันใช้งานได้ดีและชีวิตก็เรียบง่าย ตอนนี้เมื่อเราพยายามติดตั้งบน Windows 7 และ Windows 8 โปรแกรมจะถูกติดตั้งลงในโฟลเดอร์ไฟล์โปรแกรม (x86) โปรแกรมทำงานได้ดี แต่การอัพเดตฐานข้อมูลและไฟล์คำทั้งหมดจะถูกจัดเก็บไว้ในร้านค้าเสมือนในโฟลเดอร์ผู้ใช้ซึ่งไม่ใช่สิ่งที่เราต้องการ

ฉันรู้ว่าทำไมสิ่งนี้ถึงเกิดขึ้น และฉันรู้ว่าฉันต้องแก้ไขโปรแกรมเพื่อรองรับ Windows 7/8 ใครช่วยกรุณาให้คำอธิบาย / คำแนะนำที่ชัดเจนเกี่ยวกับวิธีการต่อไปนี้แก่ฉันได้ไหม:

ฉันรู้ว่าโฟลเดอร์ appdata ภายใต้ "ผู้ใช้" เป็นสถานที่ที่แนะนำในการจัดเก็บฐานข้อมูล/ไฟล์คำ/ข้อมูลสำรอง อย่างไรก็ตาม ในระบบของฉันที่ถูกซ่อนอยู่ และฉันต้องการให้ผู้ใช้เข้าถึงได้ง่าย (ไม่ซ่อนอยู่) ดังนั้นฉันจึงนึกถึงโฟลเดอร์ MyDocuments?

ฉันได้อ่านหัวข้อนี้แล้ว: ฉันควรเก็บการตั้งค่าเฉพาะแอปพลิเคชันไว้ที่ไหน ? ซึ่งทำให้ฉันเข้าใจวิธีค้นหาไฟล์/ตำแหน่งในโค้ด แม้ว่าจะไม่ชัดเจนว่าจะหา MyDocuments ได้อย่างไร มีใครช่วยได้บ้าง

นี่ฉันยิ่งสับสนมากขึ้นไปอีก หากฉันต้องการใช้บางอย่างเช่น MyDocuments\CompanyName หรือแม้แต่โฟลเดอร์ Appdata ที่กล่าวถึงในลิงก์ด้านบน ฉันจะบอกตัวช่วยสร้างแพ็คเกจ/การปรับใช้ให้ติดตั้งไฟล์ mdb และโฟลเดอร์ที่กล่าวถึงข้างต้นลงในโฟลเดอร์เฉพาะนี้ได้อย่างไร มีแมโครสำหรับโฟลเดอร์ Appdata หรือ MyDocuments ใน PDW ที่ฉันสามารถใช้ได้หรือไม่ ฉันใช้เครื่อง XP ดังนั้นเส้นทางของฉันจึงแตกต่างจากเครื่อง Windows 7/8

ความช่วยเหลือ / ข้อมูลเชิงลึกใด ๆ ที่จะได้รับการชื่นชมอย่างมาก


person John Marzion    schedule 20.03.2013    source แหล่งที่มา
comment
การทิ้งแอปลงในที่ตลกๆ เช่น ไดเร็กทอรีภายใต้รูทไดรฟ์ของระบบ และปล่อยให้ผู้ใช้ทั้งหมดเป็นผู้ดูแลระบบหรือผู้ใช้ระดับสูง พร้อมด้วยแอปพลิเคชันที่เข้ากันได้มากมาย ทำให้ผู้คนจำนวนมากแสร้งทำเป็นว่า WinXP เป็นเครื่อง Win9x โลกนี้ซับซ้อนกว่ามาก และเนื่องจากเทคนิคดังกล่าวทำให้เกิดช่องโหว่ด้านความปลอดภัย PDW จึงมีประโยชน์เฉพาะสำหรับการใช้งานแบบธรรมดาเท่านั้นในขณะนี้   -  person Bob77    schedule 21.03.2013
comment
คุณกำลังบอกว่าการใช้ PDW ไม่มีวิธีง่ายๆในการติดตั้งไฟล์/โฟลเดอร์ mdb ลงในโฟลเดอร์ MyDocument หรือโฟลเดอร์ AppData ของผู้ใช้หรือไม่ Inno จะทำให้ง่ายขึ้นไหม?   -  person John Marzion    schedule 21.03.2013
comment
โดยส่วนตัวแล้วฉันจะหลีกเลี่ยงอินโนะเหมือนโรคระบาด อาจมีประสิทธิภาพมาก แต่คุณสามารถสร้างการตั้งค่าที่ไม่สม่ำเสมอซึ่งจะทำให้แอปพลิเคชันอื่น ๆ บนพีซีเครื่องเดียวกันเสียหายได้อย่างง่ายดาย ไม่มีตัวติดตั้งสามารถติดตั้งลงในโฟลเดอร์ของผู้ใช้ได้ เนื่องจากไม่มีทางรู้ได้ว่าผู้ใช้หรือผู้ใช้รายใดจะเข้าสู่ระบบและคาดว่าจะใช้แอปพลิเคชันของคุณ   -  person Bob77    schedule 21.03.2013
comment
ต่อไปนี้เป็นแนวคิด: หากคุณมีเฉพาะข้อมูลต่อผู้ใช้ (ไม่มีฐานข้อมูลที่ใช้ร่วมกันหรือการตั้งค่าส่วนกลาง) ให้ใช้ PDW เพื่อสร้างการตั้งค่าของคุณโดยวางทุกอย่างไว้ภายใต้ไฟล์โปรแกรม มีการตรวจหาและการดำเนินการครั้งแรกในแอปพลิเคชันของคุณเพื่อสร้างโฟลเดอร์ต่อผู้ใช้และคัดลอกข้อมูลลงในนั้นจากสำเนาหลัก/เทมเพลตในโฟลเดอร์ Program Files - อ๊ะ ฉันเห็นว่า Cody ได้แนะนำสิ่งนี้ไว้ด้านล่างนี้แล้ว   -  person Bob77    schedule 21.03.2013
comment
คุณยังสามารถจัดการข้อมูลที่แชร์ (ต่อเครื่อง) ได้ในลักษณะเดียวกัน เพิ่มการตรวจจับและการดำเนินการรันเครื่องแรกอื่นให้กับแอปพลิเคชันของคุณ หากไม่มีโฟลเดอร์และไฟล์ต่อเครื่อง ให้รันตัวเองอีกครั้งโดยผ่านอาร์กิวเมนต์บรรทัดคำสั่ง ในการรันนี้ คุณจะเห็นอาร์กิวเมนต์ ตรวจสอบว่าคุณกำลังใช้งานในฐานะผู้ดูแลระบบ จากนั้นสร้างโฟลเดอร์ย่อย ProgramData ตั้งค่าความปลอดภัยที่จำเป็น และคัดลอกไฟล์ต่อเครื่องที่นั่น   -  person Bob77    schedule 21.03.2013
comment
คำถามที่ดีกับคำตอบที่ดี ฉันได้โหวตและรายการโปรดแล้ว แต่เมื่อพิจารณาคำตอบแล้ว คุณควรพิจารณา: โลกนี้แตกต่างจากโปรแกรม VB6 ที่คุณคิดไว้มาก อาจถึงเวลาอัพเกรดเป็น VB.NET จริง ๆ แล้วให้แอปพลิเคชั่นของคุณมีอายุการใช้งานอีกสิบปี?   -  person John Saunders    schedule 22.03.2013
comment
ฉันอยากจะอัพเกรดเป็น vb.net แต่นั่นไม่ใช่ความเชี่ยวชาญของฉัน และฉันมีงานประจำและมีลูก 3 คนที่ทำให้ฉันยุ่ง   -  person John Marzion    schedule 23.03.2013


คำตอบ (2)


ฉันรู้ว่าทำไมสิ่งนี้ถึงเกิดขึ้น และฉันรู้ว่าฉันต้องแก้ไขโปรแกรมเพื่อรองรับ 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
comment
ว้าว. ขอบคุณสำหรับการตอบรับที่ครอบคลุมมาก ฉันรู้สึกหนักใจมาก แต่ฉันจะใช้เวลาในการย่อยมัน ฉันซาบซึ้งมากที่สละเวลาและความพยายามในการอธิบายแนวทางนี้ - person John Marzion; 21.03.2013
comment
@ Bob77 หรือใครก็ตามสามารถให้ข้อมูลเชิงลึกเกี่ยวกับวิธีที่ดีที่สุดในการพิจารณาว่าเป็นการเรียกใช้แอปพลิเคชันครั้งแรกหรือไม่ ฉันคิดได้แค่ว่าจะเพิ่มไฟล์ข้อความปลอมระหว่างการติดตั้ง แล้วตรวจสอบว่าไฟล์นั้นอยู่ที่นั่นหรือไม่ หากเป็นเช่นนั้น ให้คัดลอกไฟล์ไปยัง MyDocuments และลบไฟล์ข้อความ เพื่อข้ามครั้งต่อไป ฉันจำเป็นต้องกังวลเกี่ยวกับสิทธิ์หรือยกระดับเป็นผู้ดูแลระบบเลยหรือไม่ ฉันจะทำสิ่งนี้ในโค้ดได้อย่างไร ขอบคุณล่วงหน้า - person John Marzion; 23.03.2013
comment
ตัวเลือกที่ชัดเจนที่สุดคือการตรวจจับพื้นฐานจากการมีอยู่ของคีย์รีจิสทรีต่อผู้ใช้ (เพิ่มในระหว่างการรันครั้งแรกเมื่อตรวจไม่พบ) หรือดีกว่าบางอย่างเช่นไฟล์ INI ต่อผู้ใช้ที่จัดเก็บไว้ในโฟลเดอร์พิเศษ LocalAppData - person Bob77; 03.04.2013
comment
@John โดยปกติแล้วการมีอยู่ของการกำหนดค่าใด ๆ ที่คุณทำในการรันครั้งแรกจะบ่งบอกว่าไม่ใช่การรันครั้งแรก แต่หากคุณต้องการไฟล์ Sentinel ฉันจะทำตามคำแนะนำที่สองของ Bob และใช้ไฟล์ต่อผู้ใช้ในโฟลเดอร์ AppData ในเครื่องหรือที่โรมมิ่ง นี่คือสิ่งที่ Google Chrome ทำโดยบังเอิญ โดยจะวางไฟล์ว่างชื่อ First Run ไว้ในโฟลเดอร์ AppData ในเครื่อง หากมีไฟล์อยู่ นั่นแสดงว่า Chrome ได้ถูกใช้งานไปแล้วครั้งหนึ่ง - person Cody Gray; 04.04.2013

ฉันรู้ว่าโฟลเดอร์ appdata ภายใต้ "ผู้ใช้" เป็นสถานที่ที่แนะนำในการจัดเก็บฐานข้อมูล/ไฟล์คำ/ข้อมูลสำรอง อย่างไรก็ตาม ในระบบของฉันที่ถูกซ่อนอยู่ และฉันต้องการให้ผู้ใช้เข้าถึงได้ง่าย (ไม่ซ่อนอยู่) ดังนั้นฉันจึงนึกถึงโฟลเดอร์ MyDocuments?

ทั้งสองแห่งเป็นสถานที่สำหรับข้อมูลต่อผู้ใช้ ด้วยเหตุนี้โปรแกรมติดตั้งของคุณจึงไม่สามารถวางสิ่งใดๆ ไว้ที่นี่ได้ เนื่องจากภายใต้สถานการณ์ปกติ โปรแกรมจะไม่ทำงานภายใต้ผู้ใช้รันไทม์เป้าหมายด้วยซ้ำ และจะไม่ทราบว่าจะกำหนดเป้าหมายข้อมูลนี้ไปที่ใด

แต่คุณจะต้องตัดสินใจว่าไฟล์ใดเป็นต่อคอมพิวเตอร์และไฟล์ใดต่อผู้ใช้ ไฟล์ต่อผู้ใช้ใด ๆ ควรถูกสร้างหรือคัดลอกโดยแอปพลิเคชันของคุณในการ "รันครั้งแรก" ซึ่งโดยปกติควรตรวจพบโดยการตรวจสอบว่ามีไฟล์ INI ต่อผู้ใช้อยู่ในโฟลเดอร์แอปพลิเคชันต่อผู้ใช้ (ซึ่งจำเป็นต้องสร้างด้วย) ภายใต้ LocalAppData

ไฟล์ต่อเครื่องจะเข้าไปในโฟลเดอร์ที่ตัวติดตั้งสร้างขึ้นภายใต้ ProgramData (CommonAppData) ในกรณีส่วนใหญ่ โปรแกรมติดตั้งของคุณไม่จำเป็นต้องสร้างโฟลเดอร์ย่อย "บริษัท/แอป" นี้เท่านั้น แต่ยังต้องตั้งค่าความปลอดภัยในโฟลเดอร์เพื่อให้ผู้ใช้มีสิทธิ์การเข้าถึงที่จำเป็นสำหรับรายการที่วางอยู่ที่นั่น จากนั้นตัวติดตั้งสามารถวางข้อมูลที่ปรับใช้ต่อเครื่อง เช่น ไฟล์การตั้งค่า, MDB ฯลฯ ลงในโฟลเดอร์นี้

ข้อยกเว้นอาจเป็นไฟล์ "เทมเพลต" ต่อเครื่องที่การดำเนินการเรียกใช้ครั้งแรกของคุณคัดลอกไปยังโปรไฟล์ผู้ใช้ หรือข้อมูลอื่นที่อ่านได้อย่างเดียวตลอดอายุของแอปพลิเคชัน สิ่งเหล่านี้ยังสามารถถูกทิ้งลงในโฟลเดอร์ย่อย Program Files ถัดจาก EXE (หรือในโฟลเดอร์ย่อย ฯลฯ )

PDW เก่าเกินไปและดั้งเดิมที่จะทำกิจกรรมการติดตั้งทั้งหมดที่จำเป็น ไม่ได้หมายความว่าคุณไม่สามารถแฮ็ก setup1.vbp (ได้มาจากการติดตั้ง VB6 และ PDW) เพื่อทำการตั้งค่าแบบกำหนดเอง1 แต่โดยปกติแล้วสิ่งนี้ไม่คุ้มกับปัญหา เนื่องจากคุณไม่สามารถขยาย "ตัวช่วยสร้าง" ของ PDW ให้มีหน้าจอใหม่และยอมรับข้อมูลใหม่ได้

เมื่อ Windows Installer ปรากฏตัวในปี 1998 Microsoft ได้เปิดตัวเครื่องมืออัปเดตฟรีที่เรียกว่า Visual Studio 6.0 Installer 1.0 (และอีกหนึ่งปีต่อมาหรือประมาณนั้น 1.1) เพื่อเสริม / แทนที่ PDW

Microsoft ไม่ได้โฮสต์ไฟล์ดาวน์โหลดสองไฟล์ที่ประกอบด้วย VSI 1.1 อีกต่อไป แม้ว่าคุณอาจยังพบสำเนาที่โฮสต์โดยบุคคลที่สาม (แม้ว่าไวรัสจะสแกนอะไรแบบนั้นก็ตาม)

คุณยังสามารถใช้ประเภทโปรเจ็กต์ตัวติดตั้งใน Visual Studio เวอร์ชันล่าสุดได้ (แม้ว่าฉันเชื่อว่าพวกเขาจะดึงมันเริ่มต้นใน VS 2012) นอกจากนี้ยังมีสิ่งต่างๆ เช่น ชุดเครื่องมือ WiX และเครื่องมือที่ใช้ตัวติดตั้งจากบุคคลที่สาม

แต่ถึงแม้จะมี VSI 1.1 คุณจะพบว่าหลายสิ่งที่คุณจำเป็นต้องมีแพ็คเกจของคุณไม่สามารถระบุได้ภายใน VSI 1.1 และนั่นหมายความว่าคุณต้องทำการปรับแต่งบางอย่างหลังการสร้างกับฐานข้อมูล MSI คุณสามารถทำได้โดยใช้ Orca จาก Installer SDK หรือผ่านสคริปต์ WSH ที่ใช้อินเทอร์เฟซอัตโนมัติของ Windows Installer เพื่อทำการแก้ไขหลังการสร้างเหล่านี้

ฉันได้อ่านกระทู้นี้แล้ว: ฉันควรเก็บการตั้งค่าเฉพาะแอปพลิเคชันไว้ที่ไหน? ซึ่งทำให้ฉันเข้าใจวิธีค้นหาไฟล์/ตำแหน่งในโค้ด แม้ว่าจะไม่ชัดเจนว่าจะค้นหา MyDocuments ได้อย่างไร ใครสามารถช่วยได้บ้าง?

คุณใช้การทำงานของเชลล์ผ่านทางอินเทอร์เฟซอัตโนมัติหรือการเรียก API มีการร้องขอตำแหน่งนี้ผ่านค่าคงที่ ssfPERSONAL, CSIDL_PERSONAL หรือ FOLDERID_Documents ขึ้นอยู่กับว่าคุณตัดสินใจโทรเพื่อรับตำแหน่งใด

person Bob77    schedule 20.03.2013
comment
ขอบคุณสำหรับการตอบรับที่ดี ไม่แน่ใจว่าจะดึงสิ่งที่คุณแนะนำออกมาได้อย่างไร แต่มันชี้ทิศทางให้ฉัน จากที่ ฉันไม่ได้ทำ แต่ฉันแค่ต้องถามแผนกว่าจะเกิดอะไรขึ้นใน Windows 7 และ 8 ถ้าฉันเพียงแค่ติดตั้งโปรแกรมใน c:\myprogram พร้อมโฟลเดอร์ย่อยสำหรับ mdbs, เอกสารคำ ฯลฯ เหมือนที่ฉันเคยทำไปแล้ว ในวันนี้? โอ้ ฉันอยากได้เวลาที่เรียบง่ายกว่านี้จัง :) - person John Marzion; 21.03.2013
comment
ทันทีที่ผู้ใช้เปิดสิ่งเหล่านี้ด้วยการเข้าถึง R/W Windows จะทำสำเนาส่วนตัวใน VirtualStore วิธีนี้ใช้ได้ผลในบางกรณีเป็นทางเลือกที่เดินกะโผลกกะเผลก แต่มีผลกระทบที่อาจนำไปสู่ความสับสนทุกประเภท มันไม่ได้มีวัตถุประสงค์เพื่อเป็นกลยุทธ์การพัฒนา แต่เป็นวิธีการที่จะเดินกะโผลกกะเผลกไปพร้อมกับโปรแกรมเก่าที่คุณไม่มีซอร์สโค้ด - person Bob77; 21.03.2013