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
Benutzerbild von jaenicke
jaenicke

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

AW: Probleme mit BITS

  Alt 20. Sep 2016, 05:41
Ich habe dies heute Morgen kurz ausprobiert. Bei mir ist der Aufruf erfolgreich. Kann es sein, dass du an deinem System etwas verändert hast? Gewisse Tuning-Tools deaktivieren diesen Dienst zum Beispiel gerne, obwohl es ja nicht so ist, dass er nicht benötigt wird.
Probiere es am besten einmal auf einem frischen System oder in einer neu aufgesetzten VM.

Du weist dem Pointer die Adresse 0 zu. (BG_JOB_TYPE_DOWNLOAD ist das erste Element im Enum BG_JOB_TYPE, und hat somit automatisch den numerischen Wert 0.)
Welcher Pointer? Der zweite Parameter ist vom Typ BG_JOB_TYPE, also genau der Enumeration, von deren Typ auch pJobType ist. Das p für Pointer ist in dem Variablennamen allerdings ungünstig gewählt.

Aber ich wage zu bezweifeln, dass dies das Problem löst. Soweit sich meine kurze Googelei darstellte, scheint dieser Weg (diese Komponente bzw. das Framework) auch nicht sonderlich populär. Was stört dich an den ganz normalen Socket Komponenten, oder den Indys? Gerade mit den Indys sollte das ein Kinderspiel sein, und man findet massig Doku und anderes Material dazu im Netz.
BITS bietet schon eine Menge mehr Möglichkeiten als man selbst einfach mal so umsetzen kann. Das System lädt die Datei zum Beispiel komplett im Hintergrund mit niedriger Priorität herunter und benachrichtigt dich, wenn sie da ist.

Jemand hier im Forum hat darüber auch glaube ich schon auf den Delphi-Tagen gesprochen, mir fällt nur der Name nicht ein...
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Probleme mit BITS

  Alt 20. Sep 2016, 10:39
Jemand hier im Forum hat darüber auch glaube ich schon auf den Delphi-Tagen gesprochen, mir fällt nur der Name nicht ein...
Ich glaub das letzte oder vorletzte Jahr? (von diesma weiß ich nichts)

BITS bietet schon eine Menge mehr Möglichkeiten als man selbst einfach mal so umsetzen kann. Das System lädt die Datei zum Beispiel komplett im Hintergrund mit niedriger Priorität herunter und benachrichtigt dich, wenn sie da ist.
Im Grunde ist es ja vorallem genau dafür gedacht.
* Nur "Einer" muß ins Internet (nur BITS, wegen der Firewall),
* der kann alles in Ruhe runterladen, wenn der Rechner Zeit hat, bzw. wenn ein passendes Netzwerk zur Verfügung steht (z.B. nicht über's teure Handynetz)
* und nicht jedes poplige Programm muß einen eigenen Updateservice installieren, der ständig läuft, oder selber bei jedem Programmstart nachgucken.

Wir hätten uns die Raumpläne aufheben sollen, um nochma nachgucken zu können.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (20. Sep 2016 um 10:43 Uhr)
  Mit Zitat antworten Zitat
HolgerX

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

AW: Probleme mit BITS

  Alt 20. Sep 2016, 11:06
Hallo..

Habe auch mal vor einiger Zeit etwas mit BITS rumgespielt..

Allerdings habe ich die ganze Job-Geschichte in einen eigenen Thread ausgelagert, welcher auch den Status abfrägt und entsprechend Rückmeldung gibt.

Von dort habe ich mal etwas heraus gezogen:

Delphi-Quellcode:
procedure InitJob(AFileNameSource : WideString; AFileNameTarget : WideString);
var
  Bits : IBackgroundCopyManager;
  Job: IBackgroundCopyJob;
  JobID: GUID;
begin
  CoInitialize(nil);
  try
    try
      Bits := CoBackgroundCopyManager_.Create;

      // Erstellen neuen Job
      Assert(Succeeded(Bits.CreateJob('BITSJob', BG_JOB_TYPE_DOWNLOAD, jobID, job )));

      // Fileeinträge erzeugen
      Assert(Succeeded(job.AddFile(PWideChar(AFileNameSource), PWideChar(AFileNameTarget))));

      // Priorität setzen
      Assert(Succeeded(job.SetPriority( BG_JOB_PRIORITY_HIGH )));

// ... Status-Abfragen

      job := nil;
    except
      on E: Exception do
        ShowMessage('Exception : ' + E.Classname + ': ' + E.Message);
    end;
  finally
    CoUninitialize;
  end;
end;

Dies verwendet die angehängte TLB, jedoch weiß ich nicht mehr, wo die her ist.
Auch ist die TLP für die BITS Vers. 1 und noch nicht für die Vers. 2, funktioniert auf Windows 7 aber problemlos.

Mit BITS können übrigens nicht nur Dateien aus dem Internet herunter geladen werden, sondern auch aus dem Lokalen Netz.
Angehängte Dateien
Dateityp: pas BackgroundCopyManager_TLB.pas (15,3 KB, 5x aufgerufen)
  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, 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
981 Beiträge
 
Delphi 6 Professional
 
#5

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.340 Beiträge
 
Delphi 12 Athens
 
#6

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
 
#7

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
 
#8

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.917 Beiträge
 
Delphi 12 Athens
 
#9

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
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 21: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