Menginstal aplikasi VB6 di Windows XP, Windows 7, Windows 8

Saya telah membaca postingan yang tak terhitung jumlahnya tentang topik ini, tetapi tidak dapat memikirkan semuanya. Saya memiliki aplikasi VB6 lama yang digunakan untuk menginstal di folder di direktori root. Di dalam folder itu terdapat subfolder:
\data subfolder untuk mengakses database
\quotes subfolder tempat dokumen Word yang dibuat pengguna akan disimpan dan \backup< /strong> di mana program saya secara berkala membuat cadangan salinan mdb

Itu berhasil dengan baik dan hidup itu sederhana. Sekarang, ketika kami mencoba menginstal pada Windows 7 dan Windows 8, program tersebut diinstal ke dalam folder file program (x86). Program berjalan dengan baik, tetapi semua pembaruan basis data dan file kata disimpan di penyimpanan virtual di folder pengguna yang tidak kita inginkan.

Saya tahu mengapa ini terjadi dan saya tahu saya perlu memodifikasi program saya untuk mengakomodasi Windows 7/8. Dapatkah seseorang memberi saya penjelasan/rekomendasi yang jelas tentang cara berikut:

Saya tahu folder appdata di bawah "pengguna" adalah tempat yang disarankan untuk menyimpan database/file kata/cadangan. Namun, pada sistem saya yang tersembunyi dan saya ingin mudah diakses oleh pengguna (bukan disembunyikan), jadi saya memikirkan folder MyDocuments?

Saya telah membaca thread ini: Di mana saya harus menyimpan pengaturan khusus aplikasi ? yang memberi saya gambaran tentang cara menemukan file/lokasi dalam kode, meskipun tidak jelas cara menemukan MyDocuments. Adakah yang bisa membantu?

Di sinilah saya menjadi semakin bingung. Jika saya ingin menggunakan sesuatu seperti MyDocuments\CompanyName atau bahkan folder Appdata yang disebutkan dalam tautan di atas, bagaimana cara memberi tahu wizard paket/penerapan untuk menginstal file mdb dan folder yang disebutkan di atas ke dalam folder khusus ini? Apakah ada makro untuk folder Appdata atau MyDocuments di PDW yang bisa saya gunakan? Saya menggunakan mesin XP sehingga jalur saya akan berbeda dengan mesin Windows 7/8.

Bantuan/wawasan apa pun akan sangat dihargai.


person John Marzion    schedule 20.03.2013    source sumber
comment
Membuang aplikasi ke tempat-tempat lucu seperti direktori di bawah root drive sistem dan membiarkan semua pengguna menjadi Administrator atau Pengguna Listrik bersama dengan banyak shim appcompat memungkinkan banyak orang berpura-pura bahwa WinXP adalah mesin Win9x. Dunia ini jauh lebih rumit dan karena teknik seperti itu meninggalkan celah keamanan yang menganga, PDW saat ini hanya berguna untuk aplikasi sederhana.   -  person Bob77    schedule 21.03.2013
comment
jadi apakah Anda mengatakan bahwa menggunakan PDW tidak ada cara sederhana untuk menginstal file/folder mdb ke dalam folder MyDocument pengguna atau folder AppData? Apakah Inno akan mempermudahnya?   -  person John Marzion    schedule 21.03.2013
comment
Secara pribadi saya akan menghindari Inno seperti wabah. Ini bisa sangat kuat tetapi Anda juga dapat dengan mudah membuat pengaturan tidak stabil yang merusak aplikasi lain di PC yang sama. Tidak ada penginstal yang dapat menginstal ke folder pengguna karena tidak ada cara untuk mengetahui pengguna atau pengguna mana yang akan masuk dan berharap untuk menggunakan aplikasi Anda.   -  person Bob77    schedule 21.03.2013
comment
Berikut ini idenya: Jika Anda hanya memiliki data per pengguna (tidak ada database bersama atau pengaturan global) gunakan PDW untuk membuat pengaturan Anda dengan meletakkan semuanya di bawah Program Files. Deteksi dan tindakan yang dijalankan pertama kali dalam aplikasi Anda untuk membuat folder per pengguna dan menyalin data ke sana dari salinan master/template di folder Program Files. - Ups, sepertinya Cody sudah menyarankan ini di bawah.   -  person Bob77    schedule 21.03.2013
comment
Anda juga dapat menangani data bersama (per mesin) dengan cara yang sama. Tambahkan deteksi dan tindakan pertama yang dijalankan mesin ke aplikasi Anda. Jika folder dan file per mesin tidak ada, jalankan kembali diri Anda sendiri dengan meneruskan argumen baris perintah. Saat menjalankan ini, Anda akan melihat argumennya, verifikasi bahwa Anda menjalankannya sebagai admin, lalu buat subfolder ProgramData, atur keamanan yang diperlukan di dalamnya, dan salin file per mesin di sana.   -  person Bob77    schedule 21.03.2013
comment
Pertanyaan bagus dengan jawaban bagus. Saya telah memberi suara positif dan memfavoritkan. Namun melihat jawabannya, Anda harus mempertimbangkan: dunia adalah tempat yang jauh berbeda dari yang diperkirakan oleh program VB6 Anda. Mungkin ini saatnya untuk benar-benar meningkatkan ke VB.NET dan memberikan aplikasi Anda sepuluh tahun masa pakai lagi?   -  person John Saunders    schedule 22.03.2013
comment
Saya ingin mengupgrade ke vb.net, tapi itu bukan keahlian saya dan saya memiliki pekerjaan penuh waktu dan 3 anak yang membuat saya sibuk.   -  person John Marzion    schedule 23.03.2013


Jawaban (2)


Saya tahu mengapa ini terjadi dan saya tahu saya perlu memodifikasi program saya untuk mengakomodasi Windows 7/8.

Bagus, kalau begitu saya akan mencoba untuk tidak memukul kuda mati (walaupun ini adalah salah satu yang saya sering suka memberikan cambuk yang bagus karena banyak orang yang salah paham). Saya hanya akan menunjukkan bahwa fakta bahwa program Anda pernah bekerja dengan benar, bahkan pada versi Windows yang lebih lama, merupakan konsekuensi yang menguntungkan dari bug laten. Folder "Program Files" tidak pernah dimaksudkan untuk dapat ditulisi. Anda tidak hanya mengatasi "masalah" konyol pada versi Windows yang lebih baru. Ini adalah sesuatu yang seharusnya dilakukan sejak awal.

Saya tahu folder appdata di bawah "pengguna" adalah tempat yang disarankan untuk menyimpan database/file kata/cadangan. Namun, pada sistem saya yang tersembunyi dan saya ingin mudah diakses oleh pengguna (bukan disembunyikan), jadi saya memikirkan folder MyDocuments?

Saya tahu ini rumit, jadi izinkan saya mencoba membuatnya sesederhana mungkin

Folder "Data Aplikasi" ditujukan untuk data yang ditujukan untuk penggunaan internal oleh aplikasi Anda dan tidak dimaksudkan untuk dilihat atau dimanipulasi secara langsung oleh pengguna.

Folder "Dokumen Saya" adalah untuk segala hal yang dapat dilihat dan dimanipulasi secara langsung oleh pengguna; dengan kata lain, data pengguna dan bukan data aplikasi.

Lalu ada juga varian per pengguna dan global dari masing-masing kedua jenis folder ini. Dalam kasus "Data Aplikasi", varian per pengguna dibagi lagi menjadi lokal (yang tetap berada di mesin lokal saja) dan roaming (yang mengikuti akun pengguna ke mesin mana pun di jaringan tempat dia masuk).

Jadi jika Anda ingin file "mudah diakses oleh pengguna", Anda harus menggunakan folder "My Documents". Untuk itulah—dokumen pengguna.

Alasan mengapa semua aturan rumit ini ada adalah karena aplikasi yang berperilaku buruk dari vendor populer seperti Microsoft dan Adobe memiliki (memiliki?) kecenderungan untuk membuang sampah ke folder "My Documents" milik pengguna, hal-hal yang tidak pernah dimaksudkan untuk berinteraksi dengan pengguna. secara langsung. Pengguna kemudian akan membuka folder dokumen mereka dan melihat banyak hal yang tidak pernah mereka taruh di sana. "Benda apa ini? Ini bukan milik saya. Di mana dokumen saya?" Ibu saya baru menanyakan hal ini minggu lalu ketika saya memperbarui PC-nya.

tidak jelas bagaimana menemukan MyDocuments. Adakah yang bisa membantu?

Dari VB 6? Cara mudahnya adalah yang disarankan oleh Bob dan Tandai pada pertanyaan yang Anda lihat. Ini melibatkan pembuatan objek Shell dan menanyakan lokasi folder yang Anda minati.

Bagian yang hilang adalah konstanta yang berhubungan dengan folder "My Documents". Anda dapat menemukan daftar lengkap konstanta di sini . Yang Anda inginkan diberi nama ssfPERSONAL (karena dulu ketika API ini dibuat, Windows tidak begitu ramah dan nama "Dokumen Saya" belum ditemukan), yang memiliki nilai &H05. Jadi kodenya terlihat seperti:

Const ssfPERSONAL = &H05

Dim strMyDocsPath As String
strMyDocsPath = CreateObject("Shell.Application").NameSpace(ssfPERSONAL).Self.Path

Jika saya ingin menggunakan sesuatu seperti MyDocuments\CompanyName atau bahkan folder Appdata yang disebutkan dalam tautan di atas, bagaimana cara memberi tahu paket/wizard penerapan untuk menginstal file mdb dan folder yang disebutkan di atas ke dalam folder khusus ini? Apakah ada makro untuk folder Appdata atau MyDocuments di PDW yang bisa saya gunakan?

Tidak banyak yang bisa saya tambahkan yang belum dibahas Bob dalam jawabannya, selain merekomendasikan hal itu sementara Anda memodernisasi aplikasi VB ini, Anda juga mempertimbangkan untuk membuang PDW kuno demi penginstal yang lebih baik.

Secara pribadi, saya penggemar berat Inno Setup, yang adalah utilitas penginstal gratis untuk aplikasi Windows yang menawarkan lebih banyak fitur daripada yang dapat Anda lakukan. Ia bekerja sangat baik dengan aplikasi VB 6. Saya sendiri sudah menggunakannya berkali-kali untuk itu. Menurut saya ini cukup mudah digunakan, setidaknya untuk dasar-dasarnya. Ini mendukung segala macam penyesuaian tingkat lanjut, dan beberapa di antaranya mungkin rumit jika Anda tidak belajar dengan baik dengan membaca dokumentasi, tetapi semuanya sangat bisa dilakukan. Saya bahkan tersandung dalam menulis kode Delphi untuk menyesuaikan proyek Inno Setup!

Di Inno Setup, Anda mengakses jalur ke folder sistem menggunakan salah satu konstanta yang telah ditentukan sebelumnya. Misalnya, {userdocs} dan {commondocs}. Ini berfungsi seperti (jika tidak persis seperti, sudah lama sekali) makro di PDW.

Tentu saja, hal ini masih belum menyelesaikan masalah yang ditunjukkan Bob dengan benar: konsep folder "Dokumen Saya" milik pengguna tidak terlalu masuk akal bagi penginstal. Tentu saja Anda dapat mengakses folder "Dokumen Saya" global (publik) karena folder tersebut dibagikan kepada semua pengguna, namun ini mungkin bukan folder yang Anda inginkan. Penginstal harus dapat dijalankan oleh pengguna mana pun dengan hak istimewa yang memadai, dan kenyataannya ini sering kali merupakan akun administrator yang berbeda dari akun pengguna biasa yang digunakan untuk menjalankan aplikasi Anda. Anda tidak dapat menggunakan akun pengguna tertentu selama penyiapan, dan desain Anda harus memperhitungkan hal ini.

Bagi saya, pendekatan "templat" cocok untuk Anda. Kumpulan lengkap file yang digunakan untuk membuat akun pengguna baru dapat disimpan di folder "Program Files". Ini sebenarnya adalah tempat yang bagus untuk itu karena terlindung dengan baik dari modifikasi yang salah, dan karena Anda hanya akan membaca darinya, Anda dijamin memiliki izin yang diperlukan. Ketika aplikasi diluncurkan untuk pertama kalinya dengan akun pengguna baru, aplikasi dapat mendeteksi fakta ini dan menawarkan untuk menyiapkan akun pengguna baru untuk digunakan dengan aplikasi tersebut. Pada titik ini, Anda tahu bahwa Anda menjalankan akun pengguna yang benar, sehingga Anda dapat menggunakan kode di atas untuk menanyakan lokasi folder "Dokumen Saya" pengguna tersebut. Dengan struktur folder yang diinginkan, semuanya diatur dalam subdirektori folder aplikasi Anda di "Program Files", menyiapkan akun pengguna baru bisa semudah menyalin folder itu. Jika Anda perlu mengumpulkan informasi dari pengguna atau menawarkan opsi penyesuaian, Anda dapat menulis sedikit "First Run Wizard".

person Cody Gray    schedule 20.03.2013
comment
Wow. terima kasih atas tanggapan yang sangat komprehensif. Saya benar-benar kewalahan, tetapi saya akan meluangkan waktu untuk mencernanya. Saya sangat menghargai waktu dan upaya yang Anda berikan untuk menjelaskan pendekatan ini. - person John Marzion; 21.03.2013
comment
Bisakah @ Bob77 atau orang lain memberikan wawasan tentang cara terbaik untuk menentukan apakah ini adalah aplikasi yang pertama kali dijalankan? Saya hanya bisa berpikir untuk menambahkan file teks palsu saat instalasi dan kemudian memeriksa apakah ada di sana. Jika ya, salin file ke MyDocuments dan hapus file teks agar lain kali file tersebut dilewati. Apakah saya perlu khawatir tentang izin atau meningkatkan ke Administrator sama sekali? Bagaimana cara melakukan ini dalam kode? terima kasih sebelumnya. - person John Marzion; 23.03.2013
comment
Pilihan yang paling jelas adalah mendasarkan deteksi pada keberadaan kunci registri per pengguna (ditambahkan saat dijalankan pertama kali ketika tidak terdeteksi) atau lebih baik lagi sesuatu seperti file INI per pengguna yang disimpan di bawah folder khusus LocalAppData. - person Bob77; 03.04.2013
comment
@John Biasanya, kehadiran konfigurasi apa pun yang Anda lakukan saat pertama kali dijalankan akan menunjukkan bahwa ini bukan kali pertama dijalankan. Tetapi jika Anda memang memerlukan file sentinel, saya akan mengikuti saran kedua Bob dan menggunakan file per pengguna di folder AppData lokal atau roaming. Kebetulan, inilah yang dilakukan Google Chrome. Ini menempatkan file kosong dengan nama First Run di folder AppData lokal. Jika file tersebut ada, itu menandakan bahwa Chrome sudah dijalankan satu kali. - person Cody Gray; 04.04.2013

Saya tahu folder appdata di bawah "pengguna" adalah tempat yang disarankan untuk menyimpan database/file kata/cadangan. Namun, pada sistem saya yang tersembunyi dan saya ingin mudah diakses oleh pengguna (bukan disembunyikan), jadi saya memikirkan folder MyDocuments?

Keduanya adalah lokasi untuk data per pengguna. Dengan demikian, penginstal Anda tidak dapat meletakkan apa pun di sini karena dalam kondisi normal, penginstal tersebut bahkan tidak akan berjalan di bawah pengguna runtime target dan tidak akan mengetahui pengguna mana yang akan ditargetkan untuk data ini.

Sebaliknya Anda ingin memutuskan file mana yang per komputer dan mana yang per pengguna. Setiap file per pengguna harus dibuat atau disalin oleh aplikasi Anda saat "pertama kali dijalankan" yang biasanya dideteksi dengan memeriksa keberadaan file INI per pengguna di folder aplikasi per pengguna (yang juga perlu dibuat) di bawah LocalAppData.

File per mesin masuk ke folder yang dibuat penginstal di bawah ProgramData (CommonAppData). Dalam kebanyakan kasus, penginstal Anda tidak hanya perlu membuat subfolder "perusahaan/aplikasi" ini tetapi juga mengatur keamanan pada folder tersebut agar pengguna dapat memiliki hak akses yang diperlukan ke item yang ditempatkan di sana. Kemudian penginstal dapat menempatkan data per mesin yang diterapkan seperti file pengaturan, MDB, dll. ke dalam folder ini.

Pengecualian mungkin berupa file "templat" per mesin yang disalin oleh tindakan pertama Anda ke profil pengguna, atau data lain yang hanya dapat dibaca selama masa pakai aplikasi. Itu masih dapat dibuang ke subfolder Program Files di sebelah EXE (atau di subfolder, dll.).

PDW terlalu tua dan primitif untuk melakukan semua aktivitas instalasi yang diperlukan. Itu tidak berarti Anda tidak dapat meretas setup1.vbp (disediakan dengan menginstal VB6 dan PDW) untuk membuat setup1 khusus. Namun biasanya hal ini tidak sebanding dengan masalahnya karena Anda tidak dapat memperluas "penyihir" PDW untuk memiliki layar baru dan menerima informasi baru.

Saat Penginstal Windows muncul pada tahun 1998, Microsoft merilis alat pembaruan gratis yang disebut Penginstal Visual Studio 6.0 1.0 (dan sekitar setahun kemudian 1.1) untuk melengkapi/mengganti PDW.

Microsoft tidak lagi menghosting dua file unduhan yang terdiri dari VSI 1.1 meskipun Anda mungkin masih menemukan salinan yang dihosting oleh pihak ketiga (meskipun pemindaian virus seperti itu).

Anda juga dapat menggunakan tipe proyek Penginstal di versi Visual Studio yang lebih baru (walaupun saya yakin mereka menariknya mulai dari VS 2012). Ada juga hal-hal seperti rangkaian alat WiX dan alat berbasis Penginstal pihak ketiga.

Tetapi bahkan dengan VSI 1.1 Anda akan menemukan bahwa banyak hal yang Anda perlukan agar paket Anda tidak dapat ditentukan dalam VSI 1.1, dan ini berarti Anda harus membuat beberapa penyesuaian pasca-pembuatan pada database MSI. Anda dapat melakukan ini menggunakan Orca dari SDK Penginstal atau melalui skrip WSH yang menggunakan antarmuka otomatisasi Penginstal Windows untuk melakukan pengeditan pasca-pembuatan ini.

Saya telah membaca thread ini: Di ​​mana saya harus menyimpan pengaturan khusus aplikasi? yang memberi saya gambaran tentang cara menemukan file/lokasi dalam kode, meskipun tidak jelas cara menemukan MyDocuments. Adakah yang bisa membantu?

Anda menggunakan operasi Shell baik melalui antarmuka otomatisasi atau panggilan API. Lokasi ini diminta melalui konstanta ssfPERSONAL, CSIDL_PERSONAL, atau FOLDERID_Documents bergantung pada panggilan mana yang Anda putuskan untuk mendapatkannya.

person Bob77    schedule 20.03.2013
comment
terima kasih atas tanggapan yang bagus. Tidak yakin bagaimana melakukan apa yang Anda sarankan, tapi ini mengarahkan saya ke suatu arah. Dari awal saya tidak melakukannya, tapi saya hanya perlu bertanya kepada departemen, apa yang akan terjadi di Windows 7 dan 8 jika saya menginstal program di c:\myprogram dengan subfolder untuk mdbs, dokumen word, dll seperti yang saya lakukan dulu di hari? Oh betapa aku rindu masa-masa yang lebih sederhana :) - person John Marzion; 21.03.2013
comment
Segera setelah pengguna mana pun membukanya dengan akses R/W, Windows akan membuat salinan pribadi di VirtualStore. Dalam beberapa kasus, hal ini berfungsi sebagai alternatif yang timpang, namun memiliki konsekuensi yang dapat menyebabkan segala macam kebingungan. Ini tidak dimaksudkan sebagai strategi pengembangan tetapi sebagai cara untuk berjalan pincang bersama dengan program lama yang kode sumbernya tidak Anda miliki. - person Bob77; 21.03.2013