AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit BITS

Ein Thema von GreatCornholio · begonnen am 19. Sep 2016 · letzter Beitrag vom 26. Sep 2016
Antwort Antwort
GreatCornholio

Registriert seit: 19. Sep 2016
6 Beiträge
 
Delphi XE7 Professional
 
#1

AW: Probleme mit BITS

  Alt 20. Sep 2016, 11:25
Danke für die Antworten!

Also teilweise kann ich Entwarnung geben.
Habe es gerade noch mal mit frisch gestartetem PC probiert, und mit fest gesetztem JobType-Parameter wird der Job nun fehlerlos erstellt, und es kann sogar eine Datei heruntergeladen werden.
Anscheinend hat sich "nur" der BITS-Service aufgehängt, aber so seltsam dass er zumindest noch teilweise funktioniert hat...

Was allerdings immer noch nicht geht, ist die Übergabe des JobTypes als Variable, dort kommt immer noch die gleiche Fehlermeldung wie vorher.
Ich kann Sachen machen wie:hRes:= m_Manager.CreateJob('Test', BG_JOB_TYPE(0), rJobID, pJob); , das funktioniert.
Aber das hier funktioniert nicht:
Delphi-Quellcode:
var
  i: Integer;
  ...
begin
  ...
  i:= 0;
  hRes:= m_Manager.CreateJob('Test', BG_JOB_TYPE(i), rJobID, pJob);
Warum ich BITS verwenden will wurde ja schon angesprochen.
Ich will große Dateien aus dem Internet laden, ohne mich darum kümmern zu müssen, und wenn sie irgendwann fertig sind bekomme ich eine Nachricht.
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
984 Beiträge
 
Delphi 6 Professional
 
#2

AW: Probleme mit BITS

  Alt 20. Sep 2016, 12:59
Hmm..

Bei meiner TLB ist der Typ für BG_JOB_TYPE als

TOleEnum = type LongWord;

definiert.

Bei deiner Version ist es direkt der Aufzählungstyp!

Vielleicht gibt es hier ja Unterschiede?

Aber wenn Du eh nur Downloads und keine Uploads machen willst, dann ist es doch egal und Du kannst auch direkt 0 als Konstante einsetzen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.386 Beiträge
 
Delphi 12 Athens
 
#3

AW: Probleme mit BITS

  Alt 20. Sep 2016, 13:47
Zitat:
LongWord
Delphi-Quellcode:
{$MINIMUMENUMSIZE 4}
BG_JOB_TYPE = .....;
{$MINIMUMENUMSIZE 1}
In Delphi sind ENUMs nur so groß, wie nötig. (also oft nur 1 Byte)
In C++ sind sie fast immer "UNSIGNED INT" (4 Byte)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (20. Sep 2016 um 14:29 Uhr)
  Mit Zitat antworten Zitat
GreatCornholio

Registriert seit: 19. Sep 2016
6 Beiträge
 
Delphi XE7 Professional
 
#4

AW: Probleme mit BITS

  Alt 20. Sep 2016, 14:24
Ha!
Danke für den Tip, das wars!

MfG
  Mit Zitat antworten Zitat
GreatCornholio

Registriert seit: 19. Sep 2016
6 Beiträge
 
Delphi XE7 Professional
 
#5

AW: Probleme mit BITS

  Alt 23. Sep 2016, 15:25
So, jetzt ist leider das nächste Problem aufgetaucht.
Hat schon mal jemand erfolgreich einen Programmaufruf bei Beendigung des Downloads implementiert?
Also über die Funktion IBackgroundCopyJob2.SetNotifyCmdLine()?

Ich kann mir erfolgreich einen Zeiger auf das IBackgroundCopyJob2-Interface holen, SetNotifyCmdLine aufrufen, und bekomme immer OK zurück.
Aber wenn ich einen Download starte, das Programm beende und warte, passiert einfach nichts, das Kommando wird nicht ausgeführt.
Mit bitsadmin.exe /list kann ich den Fortschritt und die Fertigstellung des Downloads verfolgen.
Ich kann sogar mit bitsadmin /info {GUID} /verbose mein Kommando sehen:
Code:
GUID: {GUID} DISPLAY: 'Test'
TYPE: DOWNLOAD STATE: TRANSFERRED OWNER: ich
PRIORITY: HIGH FILES: 1 / 1 BYTES: 70517025 / 70517025
CREATION TIME: 23.09.2016 15:55:21 MODIFICATION TIME: 23.09.2016 15:57:00
COMPLETION TIME: 23.09.2016 15:57:00 ACL FLAGS:
NOTIFY INTERFACE: UNREGISTERED NOTIFICATION FLAGS: 27
RETRY DELAY: 600 NO PROGRESS TIMEOUT: 1209600 ERROR COUNT: 0
PROXY USAGE: PRECONFIG PROXY LIST: NULL PROXY BYPASS LIST: NULL
DESCRIPTION:
JOB FILES:
        70517025 / 70517025 WORKING http://www.domain.de/MeinTestFile.zip -> D:\BITS Test\MeinTestFile.zip
NOTIFICATION COMMAND LINE: '"C:\Windows\System32\notepad.exe"'
owner MIC integrity level: MEDIUM
owner elevated ?           false

Peercaching flags
         Enable download from peers     :false
         Enable serving to peers        :false

CUSTOM HEADERS: NULL
Als CommandLine habe ich den Namen meines Programms (mit ParamStr(0)) und notepad.exe, jeweils mit und ohne Anführungszeichen verwendet.
Ich habe schon verschiedene Prioritäten verwendet, BG_JOB_PRIORITY_FOREGROUND und BG_JOB_PRIORITY_HIGH.
Die NotifyFlags vor und nach der CommandLine gesetzt.
Aber nichts funktioniert, obwohl es eigentlich funktionieren müsste...
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.974 Beiträge
 
Delphi 12 Athens
 
#6

AW: Probleme mit BITS

  Alt 23. Sep 2016, 16:03
Ich hoffe dir ist klar, dass du ein von dort gestartetes Programm nicht in der Oberfläche sehen wirst. Denn das läuft im Systemkontext und nicht im Benutzerkontext.

Bist du sicher, dass das Programm nicht gestartet wird? Hast du einmal im Taskmanager geschaut? Oder ein Programm gestartet, das einfach nur eine Datei testweise in einem festgelegten Ordner ablegt?
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
GreatCornholio

Registriert seit: 19. Sep 2016
6 Beiträge
 
Delphi XE7 Professional
 
#7

AW: Probleme mit BITS

  Alt 23. Sep 2016, 16:29
Ja ich habe im Taskmanager nachgesehen, dort taucht nichts auf, auch nicht unter anderen Benutzern.

Ich hoffe dir ist klar, dass du ein von dort gestartetes Programm nicht in der Oberfläche sehen wirst. Denn das läuft im Systemkontext und nicht im Benutzerkontext.
Das hört sich aber schlecht an.
Ich will eigentlich das ursprünglich gestartete Programm wieder aufrufen.
Also ich starte Programm1.exe, starte den Download, schließe das Programm, und wenn der Download beendet ist soll automatisch Programm1.exe wieder gestartet werden und mir mitteilen dass der Download fertig ist.

Woher weißt du dass das gestartete Programm im Systemkontext läuft, hast du das selbst schon mal ausprobiert?
In der MSDN-Doku steht was anderes:
Zitat von MSDN:
Specifies a program to execute if the job enters the BG_JOB_STATE_ERROR or BG_JOB_STATE_TRANSFERRED state. BITS executes the program in the context of the user who called this method.
Ist hier ein Fehler in der MSDN?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz