Wywołuję program wiersza poleceń z mojego skryptu Perl. Kiedy te programy się zawieszają, pojawia się komunikat z pytaniem, czy chcę powiadomić Microsoft. Ponieważ jest to zautomatyzowany system, byłoby pożądane, gdybym mógł stłumić tę wiadomość i kontynuować z innymi rzeczami w moim skrypcie. czy to możliwe?Jak ukryć okna dialogowe awarii "powiadom Microsoft", gdy wywołuję polecenie z Perla?
Odpowiedz
Prawdopodobnie możesz użyć WerAddExcludedApplication
function, aby zatrzymać WER przed uruchomieniem, gdy program się zawiesza. Ponownie powróć do wyłączania czapek za pomocą WerRemoveExcludedApplication
.
Problem nie brzmi jak jego problem z Perlem, brzmi jak problem z poleceniami systemowymi. Co masz na myśli mówiąc "kiedy te programy się zawieszają". Twoje programy systemowe?
To zależy od przyczyny awarii. To jest błąd "Win Watsona" i funkcja WinQUAL, a tak naprawdę nie powinno się zdarzyć w przypadku czystego kodu Perla, jeśli tak się stanie, oznacza to, że interpreter Perl ulega awarii i masz błąd Perl lub używasz rozszerzenia natywnego, które się zawiesza, upewnij się, że masz najnowszą stabilną kompilację Perla lub dowolnych rozszerzeń natywnych. Zawęź to do awarii.
Możesz także całkowicie wyłączyć funkcję raportowania błędów systemu Windows, korzystając z panelu sterowania Windows.
Myślę, że Pete oznacza, że program uruchamiany przez 'system' jest zawieszany, a wywołanie' system' nie powraca, dopóki okno dialogowe nie zostanie zamknięte. 'eval' nie pomoże w tym. To nie pomogłoby także z rozbijającym interpreterem Perla. – cjm
Dzięki za poprawkę. Przepraszam, naprawdę nie myślałem o mojej odpowiedzi bardzo dobrze i zrobiłem głupie założenie bez czytania dokumentów. – codenheim
Nieco więcej informacji o tym, jak wyłączyć raportowanie
Włączenie tej zasady grupy w systemie Windows error Raportowanie (WER) powinno załatwić sprawę (testowanie teraz, ponieważ mam ten sam problem): https://www.raymond.cc/blog/disable-program-has-stopped-working-error-dialog-in-windows-server-2008/
Żadne wyskakujące okienko nie zostanie podniesione w przypadku, gdy wykonasz program i będzie chrupać w twoim wywołaniu system()
w twoim skrypcie perla. Należy jednak pamiętać, że polityka będzie obejmowała cały system; nie ma problemu, jeśli system jest używany do zadań wsadowych.
whoa! Właśnie zdałem sobie sprawę, że twoje pytanie ma 6 lat .. Mam nadzieję, że naprawiłeś to już teraz :) –
Nota boczna: Jestem przekonany, że musi istnieć lepszy sposób. W końcu, co zamierzasz zrobić, jeśli jest to część zautomatyzowanego zadania w tle, lub po prostu masz nie-graficzny dostęp do powłoki ze zdalnego? Jestem prawie pewien, że istnieje * poprawne * rozwiązanie problemu; jest to po prostu hack wokół niego. – Joey