Soru RegSvr32 çıkış kodları belgeleri?


Ben oynadım RegSvr32.exe COM Sunucusu kaydetmek ve bir sonraki çıkış kodlarını almak için:

0 - düzgün normal DLL Com Server kaydederken

3 - Sahte DLL Com Server (basit metin dosyası .DLL olarak yeniden adlandırıldı.

4 - Basit DLL'yi kaydetmeyi denediğinizde, Com Server değil

Soru: Tüm olası çıkış kodlarının ve anlamlarının resmi (veya resmi olmayan ama iyi) tanımını nerede bulabilirim?

İnternette ara beni sonuç vermedi, SO buldum bu konu çıkış kodlarının Windows sistem hata koduyla aynı olduğu yazılmıştır, ancak neden hatalı dosya kaydetmeyi denediğimi anlamadım. 3 = ERROR_PATH_NOT_FOUNDve COM olmayan DLL kaydederken - 4 = ERROR_TOO_MANY_OPEN_FILES? Benim için mantıklı gelmiyor.


25
2018-02-28 11:46


Menşei




Cevaplar:


Çıkış kodları belgelenmez. Belgeler burada:

Ancak, bir sürüm REGSVR32.EXE için kaynak kodu Visual Studio 2008 ile birlikte gelir. Bu, 4.0.0 sürümü olarak verir, bu nedenle sürüm 6 bildirir, Windows ile birlikte gelen ile aynı değildir.

Hızlı bir bakış şunları gösterir:

#define FAIL_ARGS   1 // Invalid Argument
#define FAIL_OLE    2 // OleInitialize Failed
#define FAIL_LOAD   3 // LoadLibrary Failed
#define FAIL_ENTRY  4 // GetProcAddress failed
#define FAIL_REG    5 // DllRegisterServer or DllUnregisterServer failed.

Kaynak kodunun okunması, hiçbir koşulda, yukarıda belirtilenlerden başka hiçbir kodu döndürmediğini ve başarı için sıfır olmadığını, bunun da Windows ile aynı olmadığını kanıtladığını gösterir.

Geri dönüş kodlarındaki farkın GetProcAddress'e ulaştığı zaman olması, sanırım her zaman 5'e geri dönmek yerine, çıkış kodunu işlevinden alır.

İdeal olarak, daha yararlı bir çıkış kodu almak için GetLastError'ı kullanmış olurlardı, ancak artık çıkış kodlarına 2-4 bağlı olan çok fazla araç (örneğin üçüncü taraf yükleme programları) olduğundan şüpheleniyorum ve bunu değiştirmek için çok geç.


36
2018-02-28 12:39



Kayıtlı ikili bulunamazsa, süreç 0 değerini döndürür, bu da çıkış kodlarının maalesef bir başarı / başarısızlık göstergesi olarak güvenilir olmadığını gösterir. - Conrad B


Visual Studio, aslında RegSvr32 yardımcı programının kaynağı olan bir MFC örneğiyle birlikte gönderilir ve çıkış kodlarını toplamak için bunu hatırlıyorum.

FAIL_ARGS   1
FAIL_OLE    2
FAIL_LOAD   3
FAIL_ENTRY  4  // Not ERROR_TOO_MANY_OPEN_FILES but as expected "could not resolve 
               // DLLRegisterServer" as your using an invalid DLL
FAIL_REG    5

Örneği bulamıyorum, ancak Google’ı çıkardığım şey için Google’a sahip olmak gerekirse: http://support.microsoft.com/kb/207132 eşleşen kodları olan bu yüzden KB demo kodu RegSvr'den alınmış gibi görünüyor. Başarısızlık kodlarının her birinin arkasındaki sebepleri çalışmadaki önemsizliği.


13
2018-02-28 12:16





Ben'in cevabı doğru olsa da, şunu unutmayın hata kodu 3 aynı zamanda sonuç olarak verilir

  • .DLL bulunamadı
  • .DLL başka bir işlem tarafından kilitlendi ve okunamadı.
  • İşlemin dosyayı açmak için yeterli hakları yoktu. Örneğin, gerektiğinde yönetici hakları ile çalışmaz (C sürücüsündeki belirli dosyalar veya ortak dosyalarla)

> #define FAIL_LOAD 3 // LoadLibrary Failed 

Biraz belirsiz hissettirir, ancak LoadLibrary, belirli DLL içinde başvurulan DLL'ler anlamına gelir. Gibi bir uygulama kullanarak bağlıEksik olanlar da dahil olmak üzere tüm referansları bulabilirsiniz. Eksik bir referansın her zaman bir hata kodu 3 ile sonuçlanmadığını unutmayın (DLL'in aslında kullanmadığı durumlarda).


4
2018-04-05 14:57