Menghapus kunci registri sebagai langkah terakhir dari rutinitas instalasi

Menjadi pemula dengan "Inno Setup" dan "Inno Script Studio", saya sekarang ingin Menghapus Reg Kunci yang dibuat selama salah satu instalasi yang termasuk dalam installer saya. Artinya ini harus menjadi langkah terakhir, karena kuncinya tidak akan ada pada waktu instalasi saya yang lebih awal.

Sebenarnya, saya hanya kekurangan sintaks Pascalscript yang tepat.

Saya tahu bagaimana saya bisa melakukan ini melalui bagian [Registry], namun saya tidak tahu bagaimana melakukannya sebagai langkah terakhir.

[Registry]
Root: "HKLM"; Subkey: "SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run"; ValueType: string; ValueName: "Example"; Flags: deletekey

Melalui bagian [Code] saya mencoba ini untuk menjadikannya langkah terakhir, tetapi kompiler terus memberi tahu saya bahwa perintah saya tidak diketahui:

[Code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssPostInstall then
  begin
    Log('Installation finished. Deleting connection string.');
    RegDeleteKey(HKEY_LOCAL_MACHINE, 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run', 'Example');
  end;
end;

"RegDeleteKey" bukan perintah yang sudah ada. Dengan mencari perintah, saya hanya menemukan "RegQueryStringValue", "RegWriteStringValue", "RegDeleteStringValue" (tidak berfungsi) - bukan itu semua yang saya cari. Saya ingin menghapus kuncinya, berapa pun nilainya. Dengan harapan solusinya sederhana... terima kasih sebelumnya.


person Yauhun    schedule 03.02.2017    source sumber
comment
Kemungkinan duplikat Inno Setup: Menghapus registri yang bermasalah kunci yang ditinggalkan oleh program lain   -  person Scott    schedule 03.02.2017
comment
@Scott - tidak, tidak, karena saya sebenarnya sudah memeriksa topik yang Anda tautkan. Namun, saya ingin menghapus kunci di akhir rutinitas instalasi saya, jika Anda bekerja dengan Inno Setup Anda akan tahu bahwa bagian [Registry] akan selalu berjalan terlebih dahulu yang merupakan masalah, dan tidak ada contoh [Kode] yang diberikan di topik tertaut Anda juga, yang sebenarnya saya butuhkan. Anda tahu bahwa ini bukan duplikat dengan memeriksa bagian kode pertama saya di atas, saya selangkah lebih maju dengan pertanyaan saya - yang berarti Anda tidak meluangkan waktu untuk memahami masalah saya ketika sudah mencari duplikat.   -  person Yauhun    schedule 03.02.2017
comment
Saya menggunakan innosetup, dan memiliki beberapa proyek langsung yang menggunakannya. Saya tidak mengerti mengapa ini bukan duplikat? Anda tidak perlu melakukan perintah pasca instalasi apa pun karena jika kunci registri berlebihan dan tidak lagi digunakan - maka tidak ada bedanya ketika innosetup memanggil perintah tersebut - ini dapat dilakukan tepat di awal proses instalasi, apa pun yang Anda pedulikan. Jadi selama deklarasi registri ada di atas - itu akan menghapus kunci registri yang melanggar saat startup instalasi (tanpa memerlukan bagian [Kode] apa pun) - yang tidak ada bedanya dengan waktu penghapusan kunci yang berlebihan.   -  person Scott    schedule 03.02.2017
comment
@Scott kuncinya dibuat selama instalasi. Jika saya mencoba menghapus kunci di awal rutinitas saya, kunci tersebut bahkan belum ada, itulah sebabnya saya memerlukannya sebagai langkah terakhir. Saya sudah menulisnya di kalimat pertama saya di atas. Saya sudah menguji penghapusan dengan perintah [Registry]-part-, namun ketika saya melakukannya dengan cara ini, kuncinya akan tetap ada setelah instalasi sisanya, yang masuk akal jika instalasi membuat kuncinya. Jika Anda memeriksa contoh kode saya, Anda akan melihat bahwa saya hanya masuk ke bagian kode di sini karena saya ingin menyatakan ini sebagai langkah terakhir.   -  person Yauhun    schedule 06.02.2017
comment
Oke, poin wajar - Saya membaca pertanyaan awal Anda saat Anda membuatnya pada paket instalasi sebelumnya - yaitu skrip innosetup yang lebih lama dan Anda ingin skrip baru menghapusnya.   -  person Scott    schedule 09.02.2017


Jawaban (2)


Coba RegDeleteValue(HKEY_LOCAL_MACHINE,'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run','Example');

person RN92    schedule 29.06.2017

Ini RegDeleteKeyIncludingSubkeys:
https://jrsoftware.org/ishelp/index.php?topic=isxfunc_regdeletekeytermasuksubkeys

person Martin Prikryl    schedule 03.02.2017
comment
Jadi begitu. Masih mendapatkan kesalahan di baris yang sama, saya rasa saya juga perlu menambahkan bahwa ini adalah sebuah String? - person Yauhun; 03.02.2017
comment
Jika ini membantu: Kesalahan Kompiler mengatakan Jumlah Parameter tidak valid. Apakah saya masih melewatkan sesuatu? - person Yauhun; 03.02.2017
comment
Sebenarnya, kunci Microsoft\Windows\CurrentVersion\Run tidak mengandung subkunci apa pun. Ini hanya berisi nilai-nilai. Jadi mengapa Anda mencoba menghapus kunci? Bukankah Example sebenarnya sebuah nilai? Gunakan RegDeleteValue. - person Martin Prikryl; 03.02.2017
comment
Baiklah, tidak ada satupun perintah yang berfungsi untuk saya, di akhir instalasi, Example masih ada. Namun, kompiler tidak mengeluh sekarang. Namun masih belum mendapatkan solusinya. Jalur reg benar... EXE dijalankan sebagai admin. Aku kehabisan ide lagi. - person Yauhun; 07.02.2017
comment
Tunjukkan kepada kami ekspor registri Run, sehingga kami akhirnya mengetahui apa yang ingin Anda hapus (kunci atau nilai) + Tunjukkan kepada kami kode Anda menggunakan RegDeleteValue (Saya masih berasumsi bahwa Example adalah sebuah nilai, kecuali Anda tunjukkan sebaliknya). - person Martin Prikryl; 07.02.2017
comment
Ya maaf salah saya, lupa menambahkan itu, itu adalah nilai. Contoh di atas tetap sama (di [Code]), saya ganti saja sesuai rekomendasi Anda RegDeleteValue. Dengan solusi, saya dapat menyelesaikannya dengan menjalankan skrip kecil di akhir rutinitas instalasi yang menghapus nilainya, menghapus [Code]-Section sepenuhnya, namun bukan solusi yang saya inginkan... - person Yauhun; 07.02.2017
comment
Saya telah menguji kode persis Anda sekarang. Dan itu berhasil. Tunjukkan kepada kami ekspor kunci registri Run. - person Martin Prikryl; 07.02.2017
comment
Anda menguji bagian kode ini dan ya, itu berfungsi sebagai kode yang berdiri sendiri, sepertinya kode itu dijalankan pada waktu yang salah sehingga tidak berpengaruh jika nilainya tidak ada pada saat itu. Setup.exe memulai beberapa instalasi dan berjalan satu demi satu. Pertama: Membuat folder, masukkan semua file, Kedua: memulai Installer1 (membuat String-Registri!), Ketiga: memulai Installer2, Keempat: seharusnya menghapus kunci pada titik ini dari seluruh rutinitas instalasi, Kelima: Selesai, tidak ada tindakan lagi . Mungkinkah ini masih berjalan di tempat yang salah, bahkan CurStep = ssPostInstall? (Semoga saya menyampaikan apa yang ingin saya katakan...) - person Yauhun; 07.02.2017
comment
Jika Anda tahu bahwa kode tersebut berfungsi, dan dipanggil pada waktu yang salah, Anda seharusnya memberi tahu kami sejak awal! Namun, kecuali kode Anda dirancang dengan buruk, CurStep = ssPostInstall harus menjadi salah satu peristiwa terakhir. Namun kami tidak akan tahu tanpa Anda menunjukkan kode yang relevan kepada kami. - person Martin Prikryl; 07.02.2017
comment
Saya baru saja sampai pada kesimpulan itu, tidak menyembunyikan informasi. Ketika Anda mengujinya, saya melakukannya. Tidak ada lagi kode untuk ditampilkan di bawah bagian [Code]. Dua instalasi sebelumnya dapat ditemukan di bawah [Run], dan tidak ada lagi. Saya menggunakan kode yang sama sebelumnya untuk membuat Kunci di akhir pengaturan, jadi saya berharap ini berfungsi untuk penghapusan sebaliknya dan tidak mengharapkan masalah pada urutannya. Bersedia untuk menunjukkan lebih banyak, jika masih ingin membantu, maaf karena kurangnya pengalaman dan pemahaman, hanya melakukan ini untuk hobi. Sistem memberitahu saya untuk memindahkan diskusi ke obrolan - jika Anda belum lelah. - person Yauhun; 07.02.2017
comment
Di satu sisi, Anda menulis bahwa berfungsi sebagai yang berdiri sendiri, di sisi lain, Anda menulis bahwa Tidak ada lagi kode untuk ditampilkan. Kedengarannya bertentangan bagi saya. Jadi posting contoh minimal yang dapat direproduksi. - person Martin Prikryl; 07.02.2017
comment
Maksud saya, jika saya menjalankan bagian ini secara manual, setelah seluruh instalasi sebagai EXE kedua hanya dengan pekerjaan itu, itu akan menghapus nilai yang ingin saya hapus. Tetap saja, di bagian [Code] hanya ini yang saya miliki, jadi ya, keduanya saya katakan benar, berbicara tentang bagian Coding saja, saya menunjukkan semua yang saya miliki. Meskipun bahasa Inggris saya tidak sempurna, saya yakin ini bisa dimengerti. Jika kita tidak dapat menemukan solusi di sini, itu tidak masalah, itu hanya sebuah upaya. Saya masih memikirkan hal ini lebih jauh, dan sampai solusi saya dapat diterima. - person Yauhun; 08.02.2017
comment
Jadi mulailah dengan kode penginstal lengkap dan terus kurangi hingga Anda menemukan kode minimal yang masih menimbulkan masalah. Hanya tebakan liar: Entri Example dibuat oleh beberapa subinstaller, bukan? Apakah Anda yakin menunggu subinstaller selesai sepenuhnya? Bukankah ini masih berjalan di latar belakang, sementara penginstal utama (Inno Setup) sedang menyelesaikan (dan memanggil RegDeleteValue? - Apa yang terjadi jika Anda menunda penghapusan dengan menggunakan Sleep(10000) sebelum RegDeleteValue? - person Martin Prikryl; 08.02.2017