Saya mencoba untuk menginstal layanan menggunakan InstallUtil.exe tetapi dipanggil melalui Process.Start
. Berikut kodenya:
ProcessStartInfo startInfo = new ProcessStartInfo (m_strInstallUtil, strExePath);
System.Diagnostics.Process.Start (startInfo);
di mana m_strInstallUtil
jalur yang sepenuhnya memenuhi syarat dan exe untuk "InstallUtil.exe" dan strExePath
jalur / nama yang sepenuhnya memenuhi syarat untuk layanan saya.
Menjalankan sintaks baris perintah dari command prompt yang ditinggikan berfungsi; lari dari aplikasi saya (menggunakan kode di atas) tidak. Saya berasumsi saya sedang berurusan dengan beberapa masalah peningkatan proses, jadi bagaimana saya menjalankan proses saya dalam keadaan tinggi? Apakah saya perlu melihat ShellExecute
ini?
Ini semua pada Windows Vista. Saya menjalankan proses dalam debugger VS2008 yang ditingkatkan menjadi hak istimewa admin.
Saya juga mencoba pengaturan startInfo.Verb = "runas";
tetapi sepertinya tidak menyelesaikan masalah.
sumber
startInfo.UseShellExecute = true;
selainstartInfo.Verb = "runas";
itu berfungsi dengan baik untuk saya.Jawaban:
Anda dapat menunjukkan proses baru harus dimulai dengan izin yang lebih tinggi dengan mengatur properti Verb objek startInfo Anda ke 'runas', sebagai berikut:
Ini akan menyebabkan Windows berperilaku seolah-olah proses telah dimulai dari Explorer dengan perintah menu "Run as Administrator".
Ini berarti UAC prompt akan muncul dan perlu diakui oleh pengguna: jika ini tidak diinginkan (misalnya karena akan terjadi di tengah proses yang panjang), Anda harus menjalankan seluruh proses host dengan izin yang ditinggikan oleh Create and Embed an Application Manifest (UAC) membutuhkan tingkat pelaksanaan 'tertinggi yang tersedia': ini akan menyebabkan permintaan UAC muncul segera setelah aplikasi Anda dimulai, dan menyebabkan semua proses anak berjalan dengan izin yang ditinggikan tanpa permintaan tambahan .
Sunting: Saya melihat Anda baru saja mengedit pertanyaan Anda untuk menyatakan bahwa "runas" tidak berfungsi untuk Anda. Itu benar-benar aneh, sebagaimana mestinya (dan itu berlaku untuk saya di beberapa aplikasi produksi). Namun, mengharuskan proses induk untuk dijalankan dengan hak-hak tinggi dengan menyematkan manifes.
sumber
startInfo.ShellExecute=true
juga agar ini berfungsi ... juga saya belum bisa mendapatkan metode ini untuk bekerja dengan file yang dapat dieksekusi yang berada di jaringan berbagi (harus menyalinnya ke direktori temp lokal sebelum menjalankan). ..Kode ini menyatukan semua di atas dan memulai kembali aplikasi WPF saat ini dengan admin privs:
Pembaruan: Cara manifes aplikasi lebih disukai:
Klik kanan proyek di studio visual, tambahkan, file manifes aplikasi baru, ubah file sehingga Anda memerlukan set Administrator seperti yang ditunjukkan di atas.
Masalah dengan cara aslinya: Jika Anda meletakkan kode restart di app.xaml.cs OnStartup, masih dapat memulai jendela utama secara singkat meskipun Shutdown dipanggil. Jendela utama saya meledak jika app.xaml.cs init tidak dijalankan dan dalam kondisi balapan tertentu ia akan melakukan ini.
sumber
string[] args
ke proses respawned.Menurut artikel Chris Corio: Ajarkan Aplikasi Anda Untuk Bermain dengan Baik Dengan Kontrol Akun Pengguna Windows Vista, Majalah MSDN, Januari 2007 , hanya
ShellExecute
memeriksa manifes yang disematkan dan meminta pengguna untuk menaikkan jika diperlukan, sementaraCreateProcess
API lainnya tidak. Semoga ini bisa membantu.Lihat juga: artikel yang sama dengan .chm .
sumber
Ini akan melakukannya tanpa UAC - tidak perlu memulai proses baru. Jika pengguna yang menjalankan adalah anggota grup Admin seperti untuk kasus saya.
sumber
Anda harus menggunakan Peniruan identitas untuk meningkatkan status.
Jangan lupa untuk membatalkan konteks yang ditiru ketika Anda selesai.
sumber