Napisalem program, ktory monitoruje otwarte URLe przegladarek internetowych. Adresy te zapisuje do pliku xml. Nie ma zadnej Form - dziala tylko proces. Chce uruchamiac program przy starcie systemu. I tu dziwna sprawa. Nie chcialem uzywac Autostartu, gdyz wiadomo - kazdy sobie moze zobaczyc co w nim jest. Umiescilem wiec zapis w rejestrze. I teraz jest tak - Program i z zapisu w rejestrze i z autostartu uruchamia sie przy starcie systemu. Ale gdy uruchamiam program z rejestru - nie zapisuje danych do plikow xml. Gdy z autostartu - dziala jak powinien.
Skad ta roznica i jak ja wyeliminowac - tak zeby program poprawnie dzialal uruchamiany z rejestru?
Nie chcialem uzywac Autostartu, gdyz wiadomo - kazdy sobie moze zobaczyc co w nim jest.
W rejestrze też może zobaczyć. I pod msconfig
może zobaczyć, i pod HijackThis... dlaczego chcesz coś w autostarcie ukrywać? Trojana piszesz?
A gdzie znajduje się ten plik xml?
Masz w tym programie jakies logowanie exceptionow, czy cos w tym guscie? Moze nie mozesz z jakiegos powodu otworzyc/stworzyc pliku bo np nie masz uprawnien
Juz rozwiazalem sobie problem. Mialem dodatkowy plik tekstowy, z ktorego program czytal sciezki, gdzie ma zapisywac xml -e. I ten plik byl w katalogu wraz z programem. Okazuje sie, ze uruchomienie programu 'z pliku' dobrze wspopracowalo z plikiem z ustawieniami startowymi. Nie dzialalo z rejestru. Dopiero kiedy w programie wskazalem konkretne polozenie pliku ustawieniowego - wszystko hula jak ta lala. Czyli mialem w programie:
string szSrcLine;
ArrayList szContents = new ArrayList();
FileStream fsInput = new FileStream(@"startspy.set", FileMode.Open,
FileAccess.Read);
StreamReader srInput = new StreamReader(fsInput);
while ((szSrcLine = srInput.ReadLine()) != null)
{
// dołączanie do tablicy
szContents.Add(szSrcLine);
}
i to nie wystartuje z zapisu w rejestrze. Po zmianie na:
string szSrcLine;
ArrayList szContents = new ArrayList();
FileStream fsInput = new FileStream(@"C:\Windows\startspy.set", FileMode.Open,
FileAccess.Read);
StreamReader srInput = new StreamReader(fsInput);
while ((szSrcLine = srInput.ReadLine()) != null)
{
// dołączanie do tablicy
szContents.Add(szSrcLine);
}
Jest OK.
A przy okazji. Poradzilem sobie z wszystkimi przegladarkami poza Chrome. Nie wiem jak pobrac otwarty Url chroma. Wiecie moze?
Sa co prawda w sieci porady - ale mowia o starszych wersjach Chrome. Podobno w 2014 cos sie zmienilo i teraz stare metody nie dzialaja.
Zrobilem tylko pobieranie nazwy okna - co nie jest rozwiazaniem doskonalym:
public void DropChrome()
{
generateXML gXML = new generateXML();
if (File.Exists(chrome_file) == true)
{
try
{
Process[] procsChrome = Process.GetProcessesByName("chrome");
foreach (Process chrome in procsChrome)
{
// the chrome process must have a window
if (chrome.MainWindowHandle != IntPtr.Zero)
{
gXML.createNode(chrome_file, "CHROME", chrome.MainWindowTitle);
}
}
}
catch
{
return;
}
}
else
{
gXML.CreateXML(chrome_file, "CHROME");
}
}
pewnie w rejestrze umieściłeś program w gałęzi LOCAL_MACHINE zamiast CURRENT_USER co wpływa na użyte do uruchomienia procesu konto użytkownika, a zatem na uprawnienia do konkretnych ścieżek na dysku..