Új hozzászólás Aktív témák
-
sztanozs
veterán
válasz
Peter Kiss #8398 üzenetére
Szerintem 64-bites OS-en ezek az alkalmazások 64-bitesek, és 32-bitesre fordított futtatható fájl kontextusába nem tölthetők be. Vsz ehhez lehet köze (utolsó pont)
-
Keem1
veterán
válasz
Peter Kiss #8398 üzenetére
Csak tipp: Windows globális változók miatt?
-
initio
csendes tag
válasz
Peter Kiss #8396 üzenetére
TE EGY ISTEN VAGY
)))))))))))))
64-re fordítva Működik
EZER KÖSZÖNET!!!!
-
initio
csendes tag
válasz
Alexios #8394 üzenetére
köszönöm a példát.
esküszöm ez már varázslat. így sem megy.
egyszerűen nem értem hogy mi lesz ezekkel az exe-kkel ha a gomb indítja el.
" googlen megtalálom " ---> napok óta éjjel nappal ezen google-zok.
itt vannak a képek a " proces start info " -s változatról, a helyzet ugyanaz: nem találja a fájlt.
érdekes a sima process.start ami DIREKT A FÁJLRA MUTAT ( lásd kép ) az sem működik.
képeket csatolom. már tényleg nincsen semmi de semmi ötletem.
-
Alexios
veterán
-
martonx
veterán
Igen, én is ezt mondtam a legelejétől kezdve, hogy nem magával a programoddal van a gond, hanem valami jogosultság / külön kontextusban futás gond lesz. Ez viszont tipikusan olyan, amit mi innen távolról nem fogunk tudni megoldani helyetted.
Azt tudom leírni, hogy a helyedben mikkel próbálkoznék:1. ProcessStartInfo-t elkezdenék használni, ezzel lehet megadni, hogy pl. mi legyen a working directory-d
2. Írnék egy -bat file-t, ami kilistázza, hogy milyen fileokat lát a rendszer, a kimenetet pedig kiíratnám valahova -
initio
csendes tag
válasz
martonx #8388 üzenetére
Szia
Ezt értem. Viszont. minden egyes BAT / EXE / VBS-t simán elindít a vb.NET
A baj annyi hogy 3 azaz 3 indításnál vacakol, " nem találom a fájlt " -al
-- Servermanager
az IIS indító parancsikonja ( vagy bármi ami rá hivatkozik bat / vbs stb..... )
az WDS management ( --II --)
tehát az elérések jók, de biztos hogy valami jogosultság miatt nem fér hozzá a fájlhoz.
a kérdésem hogy mi lehet az amit be kell tennem a kódba, hogy ezeket is lássa
a programban amit a képen láttok minden gomb hibátlanul működik!
Minden BAT / EXE / VBS működik. kévéve ha: servermanager/WDS/IIS-t akarok elindítani.
minden más program flottul megy, bat-bol vbs-ből is. hibátlanul.amiket tettem:
- a bat-ban ( duplakatt ) indul a servermanager hibátlanul.
erre a batra rá hivatkozok a vb.NET-be egy gombbal, amit megnyomva látom is hogy elindul a cmd, de így már az említett " nem találja a fájl hibát " kapom
ugyanez VBS-el, duplakattal simán indul a servermanager, de ha a gomb indítja akkor nem a vb.NET ír hibát hanem VBS hibát dob hogy melyik sorban mi a gebasz
ezért gondolom hogy a vb.NET nem kap jogot látni ezeket a fájlokat.
milyen ötlet van még? nagyon kellene SOS.
-
martonx
veterán
Szia!
Én most egy ilyen példa .bat file-t csináltam:
kiszolgalokezelo.bat:
echostart %systemroot%\system32\services.msc
Ezt a Bv.Net-es programodból meghívva simán működik. Gyakorlatilag annyit tettem, hogy a start után kihagytam a /d-t, ami fingom sincs, hogy mit csinálna.
-
-
initio
csendes tag
a 22-es ről van szó, és az a szerver Manager-t hivatott elindítani
A @jelet tegyem bele abba amelyik nem indul?
II:
"Nem jó a paraméter, az idézőjel elé tedd az exe nevét és szóköz nélkül. " --> A bat jó, elindítva megnyitja!
Vagy ide külön ilyen bat kell?a @jel miért kell vagyis hogyan?
a 22-es Const lenne az.
közvetlen a bat-ra hivatkozik a gomb
a bat tartalma:
echo
#start /d "%SystemRoot%\system32\" ServerManager.exe
start /d "%systemroot%\system32\" ServerManager.exe -Verb runAs -
initio
csendes tag
válasz
sztanozs #8374 üzenetére
Szia! próbáltam megadni direkt így: C:\Windows\system32\servermanager.exe
így sem, pedig ebben nincs szóköz, sem különleges karakter.
Mint mondtam a VBS Elindítja, de mikor a gomb indítja a vbs-t akkor már a vbs írja a hibát
Nem értettem pontosan, hogy nem kell a " @ " a stringek elé, kérlek magyarázd el pontosan,
mint mondottam a c#-ben még kezdő vagyok.köszönöm előre is.
UI: te hogy csinálnád meg, tudnál egy konkrét kód-templéptet írni nekem.
Ezt is nagyon köszönöm
üdv
-
Keem1
veterán
Nem jogosultsági hiba lesz, akkor azt írná ki. Valami miatt tényleg nem találja a fájlt. Próbáltad már esetleg szóköz nélküli path használatával?
Tudom, kicsit régimódi gondolkodásmód, de sosem használok a fájlok nevében és útvonalában szóközt, ékezetes vagy speciális karaktert.
-
initio
csendes tag
válasz
sztanozs #8371 üzenetére
Igen, a fájlok ott vannak és kézzel természetesen mennek.
ahogy azt írtam is, mindenhogyan próbáltam megkerülni a C# " védelmét "ugyanis: Ha direkt indítom el a VBS / BAT vagy bármit ami meghívja az EXE fájlt azok mennek.
A vbs: ki írja hogy melyik sor melyik hiba ( a program nem található ) hibával száll el, de csak ha a C#-ben gombbal indítom, egyébként direktbe indítva a vbs elindítja a Servermanager.exe-t
A bat is ezt írja: Nem találja a fájlt, de csak ha a gomb lenyomással indítom, direktben a SM azonnal elindul minden hiba nélkül
mi lehet baj? ez végülis szerver rendszer, nem lehet hogy valami jogot kell adni neki?
a C#-os exe-t rendszergazdaként indítom a helyzet ugyanez.
3 nap és éjjel már googlézom.... ha van ötlet írjatok kérlek.
-
martonx
veterán
A kódod nem szép, a változónevekről nem is beszélve, de a célnak megfelel. Ha a többi file-al jól működik, csak ezzel a 3-mail nem, akkor kizárásos alapon valami nagyon alapvető problémának kell a háttérben lennie, mint pl. tényleg nincs ott a file / nincs jogosultságod.
Kódból nem fogsz tudni magadnak magasabb jogosultságot adni, egyszerűen eleve a megfelelő jogosultságokkal belépve a Windowsba, kell elindítani a programod, és akkor lesz jogosultága (vagy jobb gomb és Run as administrator). -
initio
csendes tag
válasz
martonx #8368 üzenetére
Sajnos nem tudom mi okozza, de nagyon szeretném kideríteni, mert itt elakadtam és nem tudok tovább haladni ameddig ez nem megoldott. Volna valami elképzelésed?
a kód jó? szerinted mi lehet még az ok?illetve ha nincs jogosultságom, hogy adom meg a kódban hogy legyen neki?
sajnos ahogy mondtam új vagyok még a c# -ben
-
initio
csendes tag
Sziasztok. Először is tisztelettel köszöntök mindenkit.
A segítségeteket kérem, abban amin épp dolgozom.
csináltam, visualstudio 2017-ben egy kis gombokkal ellátott exe-t szerveremhez.
a gombok közül mindegyik kifogástalanul működik, 3-at kivéve:
- WDS ( központi windows telepítési szolgáltatások )
- Szerver manager
- IIS beállító konzol.
A bajom az, hogy akár hogy próbálom ezeket gombokkal életre kelteni a válasza a programnak, a rendszer nem találja a megadott fájlt. próbáltam külön lnk-fájlra hivatkozni, és külön csinálni bat fájlt is, sőt VBS fájl-t ami ablakban kérdez rá külön az indításra. sőt próbáltam kijátszani is, úgy, hogy vbs-t csináltam ami egy másik vbs-t indít el, a vbs-en belül runas, stb.... de a hiba mindig az, hogy " a rendszer nem találja a megadott fájlt "
rejtelmes érdekesség, hogy ha ezeket a fájlokat ( lnk, bat, vbs ) direkt indítom, azonnal indul minden amit szeretnék. a rendszer: Server2016 datacenter.
a program kódja pontosan így néz ki:
Public Class Form1
Private Const FileName As String = "c:\.HSP Reserved\HSP-SYSTEM\HSP-Yadaptron\mnt\external-storage0\servertools\SI-RouteAddition.vbs"
Private Const FileName2 As String = "c:\.HSP Reserved\HSP-SYSTEM\HSP-Yadaptron\mnt\external-storage0\servertools\SI-Ipenable-router-onoff.vbs"
Private Const FileName3 As String = "c:\.HSP Reserved\HSP-SYSTEM\HSP-Yadaptron\mnt\external-storage0\servertools\simanoam-base\launcher\server-console.lnk"
Private Const FileName4 As String = "c:\.HSP Reserved\HSP-SYSTEM\HSP-Yadaptron\mnt\external-storage0\servertools\simanoam-base\launcher\developemode.lnk"
Private Const FileName5 As String = "c:\.HSP Reserved\HSP-SYSTEM\HSP-Yadaptron\mnt\external-storage0\servertools\simanoam-base\launcher\region-launcher.bat"
Private Const FileName6 As String = "c:\.HSP Reserved\HSP-SYSTEM\HSP-Yadaptron\mnt\external-storage0\servertools\SI-GodModeON.vbs"
Private Const FileName7 As String = "c:\.HSP Reserved\HSP-SYSTEM\HSP-Yadaptron\mnt\external-storage0\servertools\simanoam-base\launcher\gephaziko.bat"
Private Const FileName8 As String = "c:\.HSP Reserved\HSP-SYSTEM\HSP-Yadaptron\mnt\external-storage0\servertools\SI-AF_INET-ovpn-tap-1.vbs"
Private Const FileName9 As String = "c:\.HSP Reserved\HSP-SYSTEM\HSP-Yadaptron\mnt\external-storage0\servertools\SI-AF_INET-ovpn-tap-2.vbs"
Private Const FileName10 As String = "c:\.HSP Reserved\HSP-SYSTEM\HSP-Yadaptron\mnt\external-storage0\servertools\SI-AF_INET-ovpn-tap-3.vbs"
Private Const FileName11 As String = "c:\.HSP Reserved\HSP-SYSTEM\HSP-Yadaptron\mnt\external-storage0\servertools\SI-AF_INET-ovpn-tap-4.vbs"
Private Const FileName12 As String = "c:\.HSP Reserved\HSP-SYSTEM\HSP-Yadaptron\mnt\external-storage0\servertools\SI-START-AF_INET-ovpn-tap-1.vbs"
Private Const FileName13 As String = "c:\.HSP Reserved\HSP-SYSTEM\HSP-Yadaptron\mnt\external-storage0\servertools\SI-START-AF_INET-ovpn-tap-2.vbs"
Private Const FileName14 As String = "c:\.HSP Reserved\HSP-SYSTEM\HSP-Yadaptron\mnt\external-storage0\servertools\SI-START-AF_INET-ovpn-tap-3.vbs"
Private Const FileName15 As String = "c:\.HSP Reserved\HSP-SYSTEM\HSP-Yadaptron\mnt\external-storage0\servertools\SI-START-AF_INET-ovpn-tap-4.vbs"
Private Const FileName16 As String = "c:\.HSP Reserved\HSP-SYSTEM\HSP-Yadaptron\mnt\external-storage0\servertools\SI-engine\OVPN_Start_service\start-ovpn-client.bat"
Private Const FileName17 As String = "c:\.HSP Reserved\HSP-SYSTEM\HSP-Yadaptron\mnt\external-storage0\servertools\simanoam-base\launcher\nwsh-center.bat"
Private Const FileName18 As String = "c:\.HSP Reserved\HSP-SYSTEM\HSP-Yadaptron\mnt\external-storage0\servertools\simanoam-base\launcher\Tartomany.lnk"
Private Const FileName19 As String = "c:\.HSP Reserved\HSP-SYSTEM\HSP-Yadaptron\mnt\external-storage0\servertools\simanoam-base\launcher\iis-start.lnk"
Private Const FileName20 As String = "c:\.HSP Reserved\HSP-SYSTEM\HSP-Yadaptron\mnt\external-storage0\servertools\simanoam-base\launcher\wds-start.lnk"
Private Const FileName21 As String = "c:\.HSP Reserved\HSP-SYSTEM\HSP-Yadaptron\mnt\external-storage0\servertools\simanoam-base\launcher\connections.lnk"
Private Const FileName22 As String = "c:\.HSP Reserved\HSP-SYSTEM\HSP-Yadaptron\mnt\external-storage0\servertools\simanoam-base\launcher\kiszolgalokezelo.bat"
Private Const FileName23 As String = "c:\.HSP Reserved\HSP-SYSTEM\HSP-Yadaptron\mnt\external-storage0\servertools\simanoam-base\launcher\servicesmsc.lnk"
Private Const FileName24 As String = ""
Private Const FileName25 As String = ""
Private Const FileName26 As String = ""
Private Const FileName27 As String = ""
Private Const FileName28 As String = ""
Private Const FileName29 As String = ""
Private Const FileName30 As String = ""
Private Const FileName31 As String = ""
Private Const FileName32 As String = ""
Private Const FileName33 As String = ""
Private Const FileName34 As String = ""
Private Const FileName35 As String = ""
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Process.Start(FileName)
End Sub
Private Sub Button10_Click(sender As Object, e As EventArgs) Handles Button10.Click
Process.Start(FileName2)
End Sub
Private Sub Button12_Click(sender As Object, e As EventArgs) Handles Button12.Click
Process.Start(FileName3)
End Sub
Private Sub Button13_Click(sender As Object, e As EventArgs) Handles Button13.Click
Process.Start(FileName4)
End Sub
Private Sub Button14_Click(sender As Object, e As EventArgs) Handles Button14.Click
Process.Start(FileName5)
End Sub
Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click
Process.Start(FileName6)
End Sub
Private Sub Button16_Click(sender As Object, e As EventArgs) Handles Button16.Click
Process.Start(FileName7)
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Process.Start(FileName8)
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Process.Start(FileName9)
End Sub
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
Process.Start(FileName10)
End Sub
Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
Process.Start(FileName11)
End Sub
Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
Process.Start(FileName12)
End Sub
Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click
Process.Start(FileName13)
End Sub
Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click
Process.Start(FileName14)
End Sub
Private Sub Button9_Click(sender As Object, e As EventArgs) Handles Button9.Click
Process.Start(FileName15)
End Sub
Private Sub Button11_Click(sender As Object, e As EventArgs) Handles Button11.Click
Process.Start(FileName16)
End Sub
Private Sub Button21_Click(sender As Object, e As EventArgs) Handles Button21.Click
Process.Start(FileName21)
End Sub
Private Sub Button19_Click(sender As Object, e As EventArgs) Handles Button19.Click
Process.Start(FileName17)
End Sub
Private Sub Button20_Click(sender As Object, e As EventArgs) Handles Button20.Click
Process.Start(FileName18)
End Sub
Private Sub Button18_Click(sender As Object, e As EventArgs) Handles Button18.Click
Process.Start(FileName19)
End Sub
Private Sub Button17_Click(sender As Object, e As EventArgs) Handles Button17.Click
Process.Start(FileName20)
End Sub
Private Sub Button22_Click(sender As Object, e As EventArgs) Handles Button22.Click
Process.Start(FileName22)
End Sub
Private Sub Button23_Click(sender As Object, e As EventArgs) Handles Button23.Click
Process.Start(FileName23)
End Sub
End Classcsak ez a híja ami gátolja a tovább haladásomat.
kérem aki tudja a hiba okát segítsen.UI: megpróbáltam a " Private Const FileName27 As String = "" "-ban direkt megadni pl ezt:
C:\windows\system32\servermanager.exe
így sem " találja a megadott fájlt"
Eddig leginkább VBS alapon dolgoztam, és csak notepad++ használtam, a c# még új nekem,
sokindenre gondoltam hogy lehet hogy a gépház stb appok mások mint a többi normál win fájlok, és lehet hogy ezért nem látja a fájlt, ha a gomb kéri??
Nagyok hosszú éjszaka áll mögöttem, kérlek szépen segítsetek megoldást találni
Ezer köszönet előre is.
-
togvau
senior tag
Gondoltam, de így is átment más szálakra aminek kell, csak azt én kezeltem mi, hogyan megy át. De ez más nyelvekben is meg van oldva, ilyen async kényszerítés nélkül.
Csak azt nem értem, hogy miért vannak ilyen hibás, nem ajánlott dolgok a rendszerben, mert nem csak a webclient ilyen, más hasonlókról is hallottam. És még csak nem is deprecated-ek. -
vlevi
nagyúr
Az async kulcsszót arra találták ki, hogy ne neked kelljen kézzel írogatni a task.wait-et. Persze ezzel részben elrejti előled a C# a valódi működést, ami kavarodást tud okozni akkor, ha az ember nincs tökéletesen tisztában az async működésével.
Ha te várod meg a task lefutását, akkor csak csak a task fut egy külön szálon.
Azonban onnantól kezdve, hogy async-t használsz, minden átmegy egy másik threadre, vagyis, nem a program fő szálán fut, és csak akkor tér vissza a program fő szálára, ha a te metódusod teljesen lefutott.
webes alkalmazásnál, MVC-nél ez egy jó dolog, mert a fő thread csak korlátozott számú webrequestet tud egyszerre kiszolgálni, és, amíg minden a fő szálon fut, addig a többi webes kliens csak vár. Pl. van egy fél másodperces adatbázis műveleted, akkor ez azt jelentené, (async nélkül), hogy a webszervered fél másodpercenként 1-1 klienst tudna csak kiszolgálni. async használata esetén a teljes metódushívás egy új threadben folytatódik, a webszerver fő szála szabaddá válik, és fogadhatja a következő kérést a kliensektől. -
togvau
senior tag
-
togvau
senior tag
Na úgy tűnik megvan az async vírus továbbterjedését megakadályozó ellenszer XD
Task.Run(() => asyncFertőzőDolog(paraméter)).Result;
, így a várakozás is megvan. -
togvau
senior tag
Úgy néz ki most működik úgy, hogy ugyan azt a httpclientet használja.
Csak mivel kikényszerítette, hogy a paralel foreach is async legyen, a kész üzenet rögtön megjelenik, mivel nem várja meg.
próbáltam azt hogy a paralel foreach visszatérő izéjével (Parallelloopresult, hogy.
while (!paraloop.IsCompleted)
{
Thread.Sleep(500);
}De nem nyert így se, meg !-nélkül sem. Miért nem lehet ezt az async láncot egyszerűen megszüntetni, főleg ha nincs is szükségem rá?
-
togvau
senior tag
válasz
Peter Kiss #8354 üzenetére
Nincs rosszul szervezve, javaban teljesen jó.
Akar a halál asyncolni, elég a paralel is, csak hát a httpclient asyncot követel, a webclient meg nem követel, de az sem működik.Semmi bonyolult nincs benne. Generál egy letöltenő fájllistát, azokat a fájlokat meg le kell töltenie, és kicsomagolnia, minden darabot sajat szálon, mert ugye nincs közük egymáshoz.
Javaban ezt az egész listát egy foreach bedobálja egy fixedthreadpoolba, és megcsinálja. Itt a threadpoolba dobálás mivel nincs ilyen, egy paralel foreachel lett helyettesítve.Ott a lényegi rész, nincs disposeolva
-
Froclee
őstag
Nem port exhaustion? Egy static httpclient-el kell használni és nem szabad dispose-olni.
-
Peter Kiss
őstag
Biztos vagyok benne, hogy rosszul van szervezve a kódod parallel/async-await/connection close és egyebek (counter++ parallel-ben izgalmas lehet) kapcsán is, főleg, ha látod, hogy mindig ~250. vagy 500. elemnél hal meg.
https://stackoverflow.com/questions/19189275/asynchronously-and-parallelly-downloading-files - teljesen hasonló, talán segít.
-
togvau
senior tag
Amúgy akkor kódok.
Ez hívja:
Parallel.ForEach(filelist, para, async file =>
{
string downfileeee = await downloadZipAsync(file[0]);
UnzipFromFile(downfileeee, destination, file[1]);
counter++;
Application.Current.Dispatcher.Invoke(() =>Installer.MainWindow.thiswindow.downbutton.Content = "Downloaded " + counter + " of " + filelist.Count + " files");
});Ezt:
private static async Task<string> downloadZipAsync(string down)
{
string tempfile = Path.GetTempFileName();
using (var client = new HttpClient())
{
if (DEBUG) Console.WriteLine("starting download: " + down);
var fileStream = File.Create(tempfile);
Stream x= await client.GetStreamAsync(down);
x.CopyTo(fileStream);
fileStream.Close();
// wc.DownloadFile(down, tempfile);
// wc.Dispose();
}
if (DEBUG) Console.WriteLine("finished download: " + down);
return tempfile;
} -
togvau
senior tag
válasz
martonx #8347 üzenetére
webclientet se kell, de lehet. Ahogy a httpclientet is. Net Core-ban lehet nincsenek ezek a bugok? Amúgy melyik települ fel a windóz 10-el? nem a sima .net framework? Akkor a júzereknek úgy is az lesz fent... és ennek a konverziónak az a lényege, hogy ne kelljen JRE-t telepíteniük, meg mást sem. Na meg a .net programot talán nem vírusnak ismeri fel a vindóz defender...
Amúgy hihetetlen, de a HTTPclient nem kb 250. fájlnál dobja azt az exceptiont, hanem pontosan 250-nél... Teljesen mindegy hogy melyik fájl az, ha 250-et letölt, elhasal.
-
togvau
senior tag
válasz
sztanozs #8349 üzenetére
egy bugos dologról, egy még bugosabb dologra nem.
Ennél ez van, mindig kb a 250. fájl körül, +/-10:
Exception thrown: 'System.Net.Sockets.SocketException' in System.dll
A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respondÉéérdekes módon webclientnél nem ez a hiba van, amúgy is 500. környékén szokott lenni, na meg persze Java-nál sehol sincs hiba. Mindig ugyan az a szerver, ugyan azokkal a fájlokkal.
-
sztanozs
veterán
Majdnem egy évvel ezelőtt is próbáltunk már lebeszélni a WebClient-ről... Ennyi idő alatt se sikerült váltani?
-
martonx
veterán
Meg is van a cikk, bár ez még .Net frameworkos, de a lényeg benne van.
https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/
-
togvau
senior tag
WebClient wc= new WebClient();
wc.Dispose(); -nál timeoutol. De néha a downloadfile-nál is.
Miért? kb 550 fájl külön külön letöltése, összesen kb 500 mega méretben.
Ugyan ennek a programnak a Java változatánál nincs ilyen gond, (mellesleg sokszor gyorsabb is, 15 másodperc vs ~2 perc, pedig a .net-es változatban 8 letöltési szálra van korlátozva, de java-ban is csak 10)
-
petyus_
senior tag
Tavaly voltam a Grape-nél interjún, előtte lett meg ez a vizsgám (70-483), ott örültek neki, meg mondták, hogy évente 1-2-re ők is elküldenének. Nekik azért kellett, mert Microsoft Certified Partnerek (vagy valami ilyesmi a neve), és ehhez kell hogy legyen a cégnél x fejlesztő, akinek vannak ilyen certjei. Illetve a mostani munkahelyemen is mondták egyszer, hogy mindenki írja be milyen certjei vannak, mert az egyik ügyfélo csak akkor jön, ha van x darab.
-
Keem1
veterán
válasz
sztanozs #8341 üzenetére
Nagyon úgy fest az ábra, hogy a node-ba töltéskor meghívott
xmlReader
olvasott még egyet.
De a fentebb írt megoldással sikerült áthidalni.Sajnos muszáj volt így megoldanom, talán már nem emlékeztek rá, de örököltem a projekt továbbvitelét, arra viszont semmi időm nincs (egyedül kellene), hogy nulláról újraírjam az egészet. Így ahol tudok, javítok, fejlesztek, optimalizálok. Viszont a kiszedett
XmlNode
objektumokhoz nem éri meg hozzányúlni, mivel a kártyavár alján van.És épp ezért valószínűsítem, hogy ti is hallani fogtok még erről a projektről (
), biztosan elő fog kerülni újabb és újabb probléma. Ha belefognék, pár hét alatt kéne újraírni, arra (mivel nem csak ezt csinálom) semmi időm nincs.
-
Keem1
veterán
válasz
Peter Kiss #8338 üzenetére
A cél az lenne, hogy mindig, amikor egy új product node-hoz elérek, azt úgy egyben beolvassam egy XmlDocument-be.
Igen, sejtettem, hogy valami ilyesmi gond állhat mögötte.Viszont lehet, hogy megtaláltam a megoldást?
XmlNode node = xmldoc.ReadNode(xmlReader.ReadSubtree());
Látszólag azt csinálja, amit szeretnék, de nem mélyedtem bele, nem néztem meg, hogy minden szükséges adaton végigszalad-e így, viszont a csomópontok száma stimmel.
-
Keem1
veterán
Már megint elakadtam
A téma lehet hogy ismerős lesz a korábbi posztjaimból, de azért frissítem az emlékeket.Nagy (több GB-os) XML-ekkel dolgozunk, amit az xmlReader.ReadToFollowing("product") segítségével olvasok végig (így piszok gyors és szinte semmi memóriafogyasztása sincs a DOM-alapú megnyitáshoz képest).
XML struktúra:
<product-export>
<product>
<product>
<product>
</product-export>Amikor egy adott product node-on vagyok, akkor azt az egyet betöltöm egy DOM alapú objektumba, és azzal az eggyel már DOM alapon dolgozom. Így valójában hiába van az XML-ben több tízezer <product> node, mindig csak egyet töltök be DOM-ba és dolgozom vele. Ez eddig beválni látszott, ám úgy tűnik, egy óriási hiba van a gépezetben. Ugyanis onnan kezdve, hogy betöltöm az egy szem node-ot, rögtön szelektálni kezd a program, és kihagy egy csomó product node-ot. Nem jöttem rá, miért, és mi alapján. Van egy kicsi teszt fájlom, 35 node-dal, ebből 17-et lát ezzel a módszerrel. A DOM-részt kihagyva végigszalad mind a 35-ön.
Mutatom:
while (xmlReader.ReadToFollowing("product"))
{
if (xmlReader.Name.Equals("product") && (xmlReader.NodeType == XmlNodeType.Element))
{
// Számláló továbbléptetése
counter++;
Console.WriteLine(counter.ToString() + ". " + xmlReader.Name.ToString());
XmlDocument xmldoc = new XmlDocument();
XmlElement root = xmldoc.CreateElement("product-export");
xmldoc.AppendChild(root);
XmlNode node = xmldoc.ReadNode(xmlReader);A legutolsó kódsornál jelentkezik az anomália (
XmlNode node = xmldoc.ReadNode(xmlReader);
). Ha kikommentezem, ugyan üres lesz a DOM-om, de végigmegy az összes producton. Ezt a számláló utáni kiíratás mutatja.Kimenet, ha kikommentezem az említett részt:
0. product
1. product
2. product
3. product
4. product
5. product
6. product
7. product
8. product
9. product
10. product
11. product
12. product
13. product
14. product
15. product
16. product
17. product
18. product
19. product
20. product
21. product
22. product
23. product
24. product
25. product
26. product
27. product
28. product
29. product
30. product
31. product
32. product
33. product
34. product
35. productÉs ha benne hagyom:
0. product
1. product
2. product
3. product
4. product
5. product
6. product
7. product
8. product
9. product
10. product
11. product
12. product
13. product
14. product
15. product
16. product
17. productMit rontok el?
-
amargo
addikt
Amúgy van bármilyen értelme is ezeknek a vizsgáknak? Munka / projekt kapcsán kérték mar valakitől?
-
Orionk
senior tag
válasz
chepavel #8334 üzenetére
Köszönöm mindenkinek!
Úgy érzem, hogy megpróbálok egy ilyen online vizsgát. Mert, ha nem sikerül, akkor gyorsan lehet másik vizsgát tenni, akár 1 hétre rá.
Erről van valami infótok, hogy milyen szabályok vonatkoznak a vizsgára? Milyen időközönként lehet pl. ismételni? Vagy akármi másik szabályozás?
köszi
-
chepavel
aktív tag
Szia,
Nem tudom mennyire elvaras a "helyszini" vizsga, de, van opcio "online proctored" vizsgara is, az utolso nehanyat igy nyomtam (bekes megyeikent nincs ennel kenyelmesebb!)
Siman beregisztralsz a vizsgara a MS oldalan keresztul (ott van a "schedule exam" opcio), kivalasztod az idopontot, kartyaval fizetsz, es ennyi. Idoben belepsz, nehany kotelezo moka egy proctorral (igazolvany bemutatasa webcamba, ilyesmi), es lenyomod a vizsgat, ugyan azona szoftveren keresztul, amit a vizsgakozpontban hasznalnal.Tobb info, requirements EZEN az oldalon.
Update: lemaradt, szemelyes vizsgara elotte mindig Netacademiahoz mentem. Csak jo tapasztalatom van veluk.
-
petyus_
senior tag
Ezen az oldalon, amit linkeltél, rámész a schedule exam-re, megadod az adataidat, kiválasztod a helyet, ahol vizsgálni szeretnél, választasz időpontot, és kb ennyi. Elmész, viszel valami okmányt (rémlik valami olyasmi, hogy 2 féle okmányt kell vinned), amivel azonosítanak, kipakolsz mindent a zsebeidből, semmit nem vihetsz be (talán még papírzsebkendőt is adnak, hogy ne a sajátodat vidd), beülsz, megírod, kijössz
.
Én a Training360-nál voltam, de úgy rémlik, hogy több hely közül lehetett választani
-
Orionk
senior tag
Sziasztok,
Tudnátok légyszíves segíteni, főleg akik már vizsgáztak, hogy
Magyarországon hol lehet jelentkezni és mi a menete egy C# Microsoft 70-483 as vizsgának?Köszönöm szépen.
-
togvau
senior tag
Milyen ingyenes egyszerű obfuscator akánlott? Lehetőleg mindenféle sallang, pl telepítés nélkül
Mert elég beszédes a fordított kód...
-
togvau
senior tag
válasz
martonx #8328 üzenetére
Ja, végül is, amikor egy opensource játékba C# kódoltam ilyesmi problémák nem voltak
Viszont van a kódomban egy valami, egy sima letöltés számláló amihez csak annyi kell, hogy behív a weboldalra, mintha egy böngésző címsorába beírnék valamit.
WebRequest.Create("http://valami.valahol.hu/akármi/index.php?letoltoazon=kod");
Ez tavaly működött, de most nem. De ugyan ezt a stringet böngésző címsorban ellőve, megjelenik a számláló adatbázisban.
De a c# programból nem. Nincs exception, és ráfut a sorra.
Szerk: megvan, kellett egy GetResponse() rá, különben nem csinálja a dolgot.
-
Szabesz
őstag
"Ahogy vártam, ugyan az a hiba, így is:
await Task.Run(() => { new InstLogic().LetsDoThis(gemail.Text, gepassword.Password, destination); }); és itt elszáll."
Persze, hogy elszáll, hiszen egy UI száltól különböző szálon próbálsz meg hozzáférni egy UI elem csak UI szálról elérhető
property
-jéhez:gemail.Text
<- ez itt tippre egy aMainWindow
-on lévőTextBox
gepassword.Password
<- ez meg egyPasswordBox
Tényleg, átolvasni, és értelmezni, mert enélkül marha nehéz: Threading model.
#8325 és a fenti alapján mostmár remélem kezd összeállni a kép, mi mikor miért nem megy.
-
togvau
senior tag
Háttt ez... FURA
insta.email = gemail.Text;
insta.pass = gepassword.Password;
insta.dest = destination;
insta.choicess = choice.SelectedItems;
await Task.Run(() => insta.LetsDoThis());Így működik. Tehát nem lehet a task runnál paraméter, mert ha van, akkor a szokásos exception. Ha nincs, működik.
De akkor miért nem azért sír?
-
togvau
senior tag
válasz
Szabesz #8323 üzenetére
Ahogy vártam, ugyan az a hiba, így is:
await Task.Run(() => { new InstLogic().LetsDoThis(gemail.Text, gepassword.Password, destination); }); és itt elszáll.
Mégsem hívódik meg 2x, csak 1x. Beraktam egy >= hit countos breakpointot, és nincs kettő.
Tehát ha nincs invoke, akkor a háttérlogika abban a sorában száll el, ahova kéne. Ha van mindenhol, akkor meg már a task.run-nál elszáll, méghozzá akkor, amikor a háttérlogika konstruktora lefutott (amiben speciel nincs semmi).
Tehát nem csinál semmit, és elszáll az exceptionnal a háttérlogika osztály példányosításakor. Ezt is a konstruktorban elhelyezett breakpointtal néztem. Tehát vége a konstruktornak, F10 tovább lépés, a Task.Run-nál exception.
Na ilyet még nem láttam semmilyen nyelvben.Ha ehelyett new InstLogic().LetsDoThis(gemail.Text, gepassword.Password,destination); van, működik. Csak nem frissül a gui.
-
Szabesz
őstag
"Azt írja ki, amit bemásoltam. Semmi többet."
Igen, pontosan ott írja, csak értelmezni kell: "The calling thread cannot access this object because a different thread owns it.". Elolvastad amit linkeltem a threading-ről?
"A linkelt megoldásban például az nem, hogy a this.-nek nincs Dispatcher-e."
Melyikthis
-nek? Nyilván mindegyiknek nem lesz, de a szóban forgóthis
-nek van. A te esetedben aclass MainWindow : Window
példánynak lesz ilyenproperty
-je.
Bárhol máshol kézenfekvően tudod használni aApplication.Current.Dispatcher
példányt.Magától csak úgy nem fog kétszer meghívódni, de ezt a kódod teljes ismerete nélkül senki sem fogja megmondani pontosan miért történik.
Egy kicsit jobban el kellene mélyedned a fentebb linkelt témákban, mert azok alap ismerete nélkül rengeteg probléma fog még megtalálni.
A fenti példáknál feltételeztem, hogy WPF alkalmazásról van szó (többinél sem tér el jelentősen).
-
togvau
senior tag
válasz
Szabesz #8321 üzenetére
Azt írja ki, amit bemásoltam. Semmi többet.
Van egy rakás "megoldás", csak egyik sem működik. A linkelt megoldásban például az nem, hogy a this.-nek nincs Dispatcher-e.
A legközelebbi ez volt amit kitaláltam, így pl a buttonclick-ben a Task.Run MÁSODSZORI meghívásánál hasal el:
MainWindow.thiswindow.Dispatcher.Invoke(() => { Installer.MainWindow.thiswindow.choice.Items.RemoveAt(0); });
Csak kérdés, hogy 1 klikkre, ki hívja meg másodszor a buttonclicket, és ezt:
await Task.Run(() => { new InstLogic().LetsDoThis(gemail.Text, gepassword.Password, destination); });
Szóval sok mindent próbáltam, és ha nem az invoke-nál hasal el, akkor a rejtélyes másodszori Task.Run-nál hasal el. De a fura, hogy ha csak simán new-el ugyan abban a threadben indítom, akkor csak 1x fut le a buttonclick, és csak egyszer indul.
(Pedig de egyszerű volt magát a háttérlogikát asyncesíteni... bár bonyolultabb mint Java-ban, de nem vészes. Külön-külön max 8 szálakon tölt fájlokat, ellenőriz hashkódot, kicsomagol, stb...)
-
Szabesz
őstag
Egyfelől írja a kivételben, hogy mi is pontosan a baja, másfelől meg rákeresve google első találatban megoldás is van.
Ajánlott átolvasni: Threading Model, azon belül ami most téged érint: Dispatcher, abból is pl Invoke(Action)
Ha meg már
Task.Run
, akkor sokkal inkábbawait Task.Run
, a gomb eseménykezelő függvény megasync void
. -
togvau
senior tag
a vicc az, hogy az egészet meghívó metódusban történik ez, mivel a button click meghívja egyszer a taskot, majd még egyszer, ki tudja miért...
-
togvau
senior tag
hello
Van egy háttérlogikás osztályom (kisebb módosításokkal egy javas dolog át C#-sítva). amihez van GUI, és a MainWindow.xaml.cs-ben pedig egy button clicknél egy ilyen:
if (gemail.Text != null && gepassword.Password != null && gemail.Text.Length > 4 && gepassword.Password.Length > 10)
{
///*Task.Run(() =>*/ insta.LetsDoThis(gemail.Text, gepassword.Password,destination)/*)*/;
new InstLogic().LetsDoThis(gemail.Text, gepassword.Password,destination);
}Így működik, csak ugye a háttérlogika blokkolja a GUI-t amíg nem végez, én meg szeretném hogy legyen valami visszajelzés hol tart.
De ha a new-es sort kommentelem ki, és Task.Run-al futtatom, akkorException thrown: 'System.InvalidOperationException' in WindowsBase.dll
The calling thread cannot access this object because a different thread owns it.A lényeg az lenne, hogy a háttérlogika "írhasson" a gui-nak, frissítgessen feliratokat, aszerint ahogy halad.
-
cattus
addikt
válasz
DrojDtroll #8312 üzenetére
Tippre azért, mert a Hover esemény csak akkor sül el, amikor a kurzor az adott elemen kívülről az adott elemen belülre kerül (ráhúzod), nem pedig azt, hogy az adott elemre kattintott-e az egérgombbal. Felteszem az a szándékod, hogy a pictureBox-on történő egérkattintást kezeld. Ez esetben, ha van neki _Clicked függvénye akkor azt implementáld, vagy ha nincs, akkor tedd bele egy olyan konténerbe, aminek van. Vagy feliratkozhatsz az egér eseményére is és nézheted, hogy éppen az adott elemen belül van-e, de ez talán a leginkább kerülendő megoldás.
-
daddyfej
újonc
Hi!
Olyan kérdésem lenne hogy egy .csv fájl adatai benne vannak egy datagridviewer-ben, és úgy szeretném szelektálni a sorokat, hogy amit beleir a felhasználó a textbox-ba és az egyezik az első oszlopban található szöveggel csak azokat írassa ki.
Köszi előre is a segítséget!
ui:még nem vagyok igazán profi. -
martonx
veterán
válasz
DrojDtroll #8312 üzenetére
Lehet, hogy paraszt vagyok, de ha megdebuggolod, akkor biztosan látni fogod, hogy mi történik.
-
DrojDtroll
veterán
Adott az alábbi hover esemény:
private void pictureBox1_MouseHover(object sender, EventArgs e)
{
Point Loc = iom.pict.GetLoc(UserControls.Positioner.GetAbSLoc(pictureBox1));
try
{
if (Mouse.LeftButton == MouseButtonState.Pressed)
{
clickHandler.Moved(Loc);
}
Iom.pict.toolTip.SetToolTip(this.pictureBox1, "X:"+Loc.X.ToString()+" Y:"+Loc.Y.ToString()+" Intenzitás"+iom.m.avg_int_array[Loc.X, Loc.Y].ToString());
}
catch (Exception)
{
}
}Az if nem úgy működik ahogy kellene neki. Hiába van lenyomva a bal touchpad gombja, nem hívódik meg a Moved metódus.
Mi lehet a gond?
-
DrojDtroll
veterán
válasz
lord.lakli #8310 üzenetére
ki fogom próbálni ezt a lehetőséget is.
-
lord.lakli
őstag
válasz
DrojDtroll #8309 üzenetére
Miért nem dobod el az egész "képet"?
-
DrojDtroll
veterán
Köszi a tippet.
Amikor a felhasználó rajzolja a vonalat, és új koordinatara érkezik az eger, akkor a régi koordinátákat nem kellene eldobnom, hogy tudjam mit kell visszaszinezni átlátszóra. Gondolom ez így gyorsabb mint végigmenni az összes keppontton.
Jól gondolom?
-
vlevi
nagyúr
válasz
DrojDtroll #8307 üzenetére
Nem ástam bele magam C#-ban a kép kezelésbe, de egy tippem lenne, használj egy másik, átlátszó képet az eredeti fölött. Kábé, mint egy új layert. Ezen rajzold a vonalat, és csak ezt a képet frissítsd. Amikor a felhasználó befejezi a rajzolást, elég akkor rátenni véglegesen az eredeti képre a vonalat.
u.i.: Elindítottam a VS-t, és úgy látom, a pictureboxnak van Image, és BackgroundImage propertyje. Szerintem érdemes kipróbálni, hogy a "rendes" képed a backgroundimage-ben van, és a rajzolást az image-ben csinálod, és amikor készen van, akkor bemásolod az image-be.
Vagy, nem is kell bemásolni, mert, csak egy vonalat kell rá húzni. -
DrojDtroll
veterán
Nem hiszem hogy a paintben minden egyes mozdulatkor új kép generalodik.
Van egy pictureboxom. Az image-e egy Bitmap. Amikor a Bitmap-et megvaltoztom akkor automatikusan változik az is amit a pictureboxon látok? Vagy valami frissítő metódust kell meghívni?
-
BTminishop
aktív tag
válasz
DrojDtroll #8305 üzenetére
Akkor mi is a probléma?
-
DrojDtroll
veterán
válasz
BTminishop #8304 üzenetére
Ez teljesen világos. A függvények meg is vannak a globálisról lokális koordinátára alakításra.
-
BTminishop
aktív tag
válasz
DrojDtroll #8303 üzenetére
Az én ötletem az lenne, hogy a kezdőpont meghatározása után az egér pozícióját lekérdezni és azokat a pontokat befesteni a megfelelő színre, ezzel ugye csak az a gond, hogy globális koordinátákról van szó - tehát az egész ablakról nem konkrétan a négyzetről de ezt valahogy csak meglehet oldani.
-
DrojDtroll
veterán
Sziasztok!
Fejlesztek egy Forms alkalmazást, ahol feladat, hogy különböző képekre vonalakat lehessen rajzolni a következő működéssel:
A felhasználó lenyomja a bal egér gombot(ez lesz a kezdőpont) -> lenyomott egérgombbal a felhasználó meghúzza az egyenes vonalat -> ha elérte a kívánt végpontot akkor felengedi az egérgombot. Az egér mozgása közben folyamatosan látszódnia kellene a rajzolt vonalnak. Pontosan úgy kellene működni, mint amikor paintben vonalat rajzolunk, illetve a rendernek is ugyan olyan gyorsnak kellene lennie.Jelenleg egy elég kompromisszumos és rossz megoldásom van. A felhasználó kattint mind a két ponton. Egy anti alaising osztály megmondja, hogy milyen képpontok esnek a két pont közé. A megkapott pontokon végigiterálva beállítom a bitmap pixeljeit a megfelelő színűre. Ezzel főkép az a probléma, hogy nem látja a felhasználó előre amit létre fog hozni.
-
Micsurin
nagyúr
Köszi a helpet!
Más volt...
Leírom ,hogy meglegyen.
Nem fogjátok elhinni. A noti rendszere belezett csak az van frissítve vagy nem kigyomlálva amire feltétlen szükség van.
Ennek a gyökér alk.nak a bejelentkező ablaka az IE-n keresztül nyílik. Emiatt IE11 kell neki. Nekem 8 volt fent, frissítést követően azonnal enged bejelentkezni.
Új hozzászólás Aktív témák
Hirdetés
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Bomba ár! HP ProBook 450 G7 - i5-10GEN I 16GB I 256SSD I HDMI I 15,6" FHD I Cam I W11 I Gar
- 18 éve! Billentyűzet magyarítás magyarosítás. Festés vagy lézerezés és egyebek! 3 lehetőség is van.
- Eredeti Lenovo USB-C 65W töltő
- Samsung Galaxy Watch Ultra LTE 47mm, Újszerű, 1 Év Garanciával
- Lenovo ThinkPad X13 G2 multitouch
Állásajánlatok
Cég: Liszt Ferenc Zeneművészeti Egyetem
Város: Budapest