No prostě máš na stránce soubor. Ve visual studiu button a chci na button
stahnou ten soubor. Delam si launcher. Na hru a chci stahovani aktualizaci vim
ze to jde nejak automaticky ale chci to takto.
Tak teď už jenom tady "DownloadProgressChangedEventArgs" Chyba:
Error 1 The type ornamespace name 'DownloadProgressChangedEventArgs' could not be found (are you missing a using directive or an assembly reference?) C:\Users\Jakub\AppData\Local\Temporary Projects\launcher\Form1.cs 2753 launcher
Chyba ti říká: "are you missing a using directive?"
Možná by bylo dobré přidat příslušný using. Když myší klikneš na
WebClient, měla by se ti po chvíli zobrazit taková šipka a vyjede ti
automaticky možnost to doplnit. Nebo nahoru dopiš:
using System.Net;
To je jmenný prostor, kde se nachází příslušná logika.
matesax proč jsi dal do konzolové aplikace progressBar? Soubor se mi
stáhne pouze pokud spustím program jako správce a ze souboru .txt se udělal
soubor.exe.
A pak to ještě můžeš zkontrolovat při spouštění programu v
Program.cs
WindowsPrincipal principal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
if (principal.IsInRole(WindowsBuiltInRole.Administrator))
Application.Run(new Form1());
else
MessageBox.Show("Program ke svému běhu potřebuje práva administrátora!");
Pokud nebude ukládat soubor na OS >=Vista do disku C, který je
systémové chráněn proti neoprávněnému zápisu. Ale do jiného oddílu tak
administrátorská privilegia nepotřebuje. To samé platí pro osobní
dokumenty a složku Appdata.
Vždyť není potřeba stahovat do jiných složek, než do těch, na která
práva nepotřebuješ - ne? Naopak stahovat do C, nebo do Program Files je
spíš blbost...
Odpověděl jsem s tím, že hodlá stahovat do složky, na kterou to
povolení bude potřebovat - v takovém případě prostě nejde nic jiného
dělat - tak jsem to napsal a myslel. A jak jsem napsal - bránil jsem jen svůj
kód...
Tady vůbec nebyl předpoklad, že by to stahoval do složky, na kterou by
neměl oprávnění. To sis vymyslel. Army si stěžoval, že spuštění tvého
programu vyžaduje oprávnění správce a že se mu změnila přípona. Místo
toho, abys mu poradil, že si musí změnit string
"c:\cesta\soubor.exe" třeba na "Form1.cs", píšeš
"A ano musíš spustit program jako správce".
Odpověděl jsem mu ukázkou. Za změnu si mohl sám - to jsem mu tam
vysvětlil - do cílového souboru musí napsat správnou příponu. A povolení
to může chtít jedině při přístupu do složek s povolením...
Army už to má určitě opraveno, tak to necháme být.
Stejně je to v C# dost náročné. V jiných jazycích je to na 1-2 řádky.
Zrovna tento příklad bych určitě v C# (vlastně ani v jiném jazyku)
nedělal, raději bych použil nějaký hotový systémový nástroj.
Program se na spuštění jako správce dotáže, pokud bude mít manifest.
Je to tak správně, program si nesmí jen tak hrabat na systémový disk a
proto mu to jinak nebude dovoleno. Řeší se to tak u všech updaterů např.
FireFox a další.
Tato kontrola tam být musí, jelikož dle architektury
Windows hra patří do složky Program Files, do které je
podmíněný zápis. Je to tak dobře, když chce program zapsat data
uživatele, může do jeho složky. Když chce program měnit data sebe nebo
jiného programu, musí se zeptat. Vzniká tak kontrola nad tím, co se děje a
zároveň jsou vývojáři nuceni psát programy pořádně, aby byly
multiuživatelské.
Aha, neuvědomil jsem si, že hra se ve Windows nedá nainstalovat bez
oprávnění správce. Nepřipadá mi to sice logické, ale budiž. Také jsem
si myslel, že se jedná o uživatelská data, která patří do uživatelského
prostoru (přípona .cs).
.cs je přípona zdrojáku v C#, nevím, proč by to někdo někam
instaloval, ale pokud ano, dá to normálně do appdata, tam se psát může.
Politika je zkrátka taková, že pro data uživatele oprávnění potřeba
není, ale pro změnu programu je.
Když se tak dívám do historie, Army vlastně chtěl automatizovaně
stáhnout .txt, který se zřejmě na webu občas mění. O
instalaci nebyla řeč. Když použil příklad od matesaxe, tak se mu změnila
přípona na .exe a vyžadovalo to oprávnění správce. Toho se
chtěl zbavit. Netušil totiž, že do 2. parametru musí dát správný
cílový název souboru, tedy s příponou .txt.
Přesně to jsem napsal. A oprávnění bude potřeba i když bude jenom do
složky s potřebou práv stahovat - a to jsem již napsal - ať to stahuje do
uživatelských složek - že se do C, nebo do Program Files nestahuje...
Progress bar v konzoli sice občas u delších souborů používám, ale
pokud ten příkaz na stažení souboru vkládám do nějaké aplikace, tak ho
vypínám, aby nerušil. Většinou nepotřebuji průběh sledovat, protože je
to hned.
Na takové záležitosti raději používám systémové programy, ve
vlastní aplikaci to neřeším. Je to praktičtější, spolehlivější a
jednodušší na ovládání. Zápis příkazu je ještě kratší, než tvá
minimální verze v C#.
'string' does not contain a definition for'SubString'and no extension method 'SubString' accepting a first argument of type 'string' could be found (are you missing a using directive or an assembly reference?)
Aha. Tak to asi budeš muset počkat na dokončení stahování a v události
Completed volat další. Nebo možná zkus použít metodu
DownloadFile bez toho Async.
A Urls a webClient si musíš dát jako třídní proměnné. Tzn. mimo
metodu, aby byly viditelné i pro ostatní metody. Snad to už bude fungovat.
Vařím z vody nikdy jsem přes C# nic nestahoval. Tak mě prosím omluv, že
chybuju.
Nevadí, každý chybuje, bez toho Async jsme to měli doposud, ale ten
program při stahování neodpovídal a různě se zasekával i když soubory
stáhl, to je pravda. Proto jsem se doslechl že když přidám Async, tak by to
mělo být v pořádku a ten program by měl jet plynule. Mohl bych se tedy
zeptat, jak by vypadal výsledný script? Asi jsem ..., že si to neumím
udělat, ale takové věci jsem ještě nedělal.
Díky moc
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.