Saya memiliki beberapa server permainan yang menggunakan file .dll tertentu untuk dijalankan. Kadang-kadang saya perlu memperbarui server game tetapi saya tidak ingin mengganggu permainan yang sudah berjalan.
Apakah ada cara untuk mengganti file .dll (dikunci oleh Windows) sehingga contoh server game berikutnya yang menggunakan file itu membuka versi baru, dan yang lama tetap menggunakan versi lama dari .dll sampai mereka dimulai ulang ?
Apakah aman hanya membuka kunci file menggunakan salah satu alat yang melakukan itu dan menggantinya?
%LocalAppData%\Google\Chrome\Application
dan Anda akan melihat folder seperti26.0.1410.64
yang menyimpan DLL dari berbagai versi)Jawaban:
Sebenarnya, Anda bisa dan biasanya berfungsi tanpa masalah (walaupun tidak selalu)
Apa yang Anda lakukan adalah mengubah nama file tanpa memindahkannya dan memindahkan file baru di atasnya. Itu akan membuat pegangan ke file yang valid dan berfungsi sehingga instance yang sudah ada masih akan dapat mengakses file dengan benar dan instance baru (atau pegangan baru) akan pergi ke file baru.
Jelas, jika suatu program membuka kembali file dll yang sama dan mengharapkannya tetap sama persis (misalnya, jika ada sumber daya yang akan dimuat dari dll dan bahwa referensi ke sumber daya ini diekstraksi dari kode yang berjalan ketika dll dimuat ), ini akan menyebabkan masalah tetapi ini jelas bukan norma.
sumber
Tidak. Meskipun DLL mungkin sepenuhnya dipetakan ke dalam memori fisik saat aplikasi berjalan, pasti tidak ada jaminan itu. Sebagian DLL (dan bahkan yang dapat dieksekusi) dapat dipetakan ke dalam RAM sementara bit lainnya tetap di disk, dan dapat dibaca di lain waktu.
Mengubah file pada disk sementara Windows memiliki bit-bit yang dipetakan dalam RAM tidak akan berakhir dengan baik. Windows menguncinya untuk alasan yang baik.
Sunting: Saya perlu mengklarifikasi sesuatu karena beberapa orang tampaknya berniat menyalahkan Windows untuk apa yang sebenarnya merupakan masalah desain aplikasi , bukan masalah desain OS.
Anda dapat memperbarui DLL yang digunakan aplikasi di Windows tanpa menghentikan prosesnya, tetapi aplikasi tersebut harus ditulis sedemikian rupa sehingga dapat ditandai untuk membongkar perakitan, menunggu pembaruan selesai, lalu muat ulang DLL. Ini tidak ada hubungannya dengan OS yang Anda jalankan. Ini masalah desain aplikasi.
Edit: Juga lihat jawaban Stephane untuk kemungkinan solusi yang kekuatan kerja, tergantung pada bagaimana Anda merespon aplikasi khusus untuk DLL yang berubah. Saya pikir dia layak mendapatkan suara positif.
sumber
Tidak, Anda tidak harus mengotak-atik file yang ada.
Jika Anda dapat mengendalikan pemuatan majelis, dan menentukannya dibuka dengan FileShare.Delete, maka Anda harus mengubah nama. Proses yang ada akan terus merujuk pada rakitan yang diganti nama.
/programming/7147577/programmatically-rename-open-file-on-windows .
sumber
Tidak, sayangnya itu tidak mungkin.
Maaf, tepatnya kecuali ada ikatan yang terlambat, artinya aplikasi menggunakan dll ketika menjalankan beberapa bagian kode dll, tetapi masih tidak dapat diandalkan.
sumber
Anda bisa melihat bagaimana proses host asp.net bekerja dan mengembangkan sesuatu yang serupa.
Dibutuhkan seluruh aplikasi web dan memindahkannya ke lokasi sementara dari mana aplikasi itu sebenarnya dimuat. Kemudian ia meninggalkan proses untuk memantau perubahan di folder asli, ketika terdeteksi, ia memutar instance baru aplikasi di lokasi sementara baru dan mulai mengarahkan permintaan baru ke aplikasi itu. Aplikasi lama kemudian dirobohkan begitu permintaan yang tertunda selesai.
(Nitpicking, ya, ini adalah pandangan yang disederhanakan, dalam banyak kasus IIS mengantri permintaan sampai aplikasi baru dapat mengambil alih)
sumber
Sekitar satu dekade yang lalu, saya adalah pengguna bahagia http://www.eggcentric.com/ISAPILoader.htm yang melakukan live IIS ISAPI dll swapping. Mr Egg masih mendukung solusi FOSS-nya.
sumber
Pemasang NSIS memiliki satu opsi sebagai Pindah ke Temp pada Machine Restart, OS menandai beberapa file untuk pindah ke lokasi berbeda pada boot berikutnya, pada mesin berikutnya boot file-file yang ditandai ini secara otomatis pindah ke lokasi baru yang Anda pilih sebelumnya. Sedikit pencarian akan membuat Anda bahagia dalam hal ini.
sumber