Beschreibung:
Autostart für Ihre Application in die Registry eintragen.
Bei Uninstall wird das ganze wieder gelöscht.
Einfach die Installer Komponente in das " exe Projekt geben das gestartet werden soll.
Ist vielleicht noch nicht ganz Perfekt aber für Kritik bin ich immer offen.
Viel Spass damit !
AutoStartInstaller.cs
edit : using verweise
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using Microsoft.Win32;
[RunInstaller(true)]
public partial class AutostartInstaller : Installer
{
public AutostartInstaller()
{
InitializeComponent();
}
public override void Install(System.Collections.IDictionary stateSaver)
{
base.Install(stateSaver);
if (!IsAutostart())
{
Reg();
}
else
{
UnReg();
Reg();
}
}
public override void Rollback(System.Collections.IDictionary savedState)
{
base.Rollback(savedState);
if (!IsAutostart())
{
Reg();
}
else
{
UnReg();
Reg();
}
}
public override void Uninstall(System.Collections.IDictionary savedState)
{
base.Uninstall(savedState);
if (IsAutostart())
{
UnReg();
}
}
protected override void OnAfterInstall(System.Collections.IDictionary savedState)
{
base.OnAfterInstall(savedState);
}
protected override void OnBeforeUninstall(System.Collections.IDictionary savedState)
{
base.OnBeforeUninstall(savedState);
}
private static bool IsAutostart()
{
bool exists = false;
RegistryKey regKey;
regKey = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run", true);
if (regKey.GetValue(/*Hier einen string als schlüsseleintragen zb "MyApp" */ != null)
{
exists = true;
}
else
{
exists = false;
}
return exists;
}
private void UnReg()
{
RegistryKey regKey;
regKey = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run");
if (regKey == null) regKey = Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run");
regKey = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run", true);
regKey.DeleteValue((/*Hier einen string als schlüsseleintragen zb "MyApp" */, false);
regKey.Close();
}
private void Reg()
{
RegistryKey regKey;
regKey = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run");
if (regKey == null) regKey = Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run");
regKey = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run", true);
regKey.SetValue((/*Hier einen string als schlüsseleintragen zb "MyApp" */ , Parent.Context.Parameters["assemblypath"].ToString());
regKey.Close();
}
}
AutostartInstaller.Designer.cs
partial class AutostartInstaller
{
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Verwendete Ressourcen bereinigen.
/// </summary>
/// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Vom Komponenten-Designer generierter Code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion
}
Schlagwörter: Autostart, Installer mit Autostart, Installer, Setup
hab eine ähnliche software ...
bei mir hat jeder user eine eigene id die in der datenbank mit der das webservice arbeitet, gespeichert ist.
beim programmstart meldet sich der user an ( autologin funktion habe ich hier ... )
und beim call auf das webservice wird die id übergeben .....
will ja nicht nerfen aber gibs schon was neues ?
eventuell kansnt du mir ja was per mail senden und ich helfe dir weiter bzw helfe mit ?
Hallo ich bins wieder mal 🙂 .....
folgendes problem bei meiner tray anwendung
ich habe in der Main Methode ein application exit ...
/// <summary>
/// Der Haupteinstiegspunkt für die Anwendung.
/// </summary>
[STAThread]
static void Main()
{
System.Threading.Mutex mutex = new System.Threading.Mutex(true, Application.ProductName, out createdNew);
if (createdNew)
{
Splash();
Application.ApplicationExit +=new EventHandler(Application_ApplicationExit);
playIntroSound();
// NotifyIcon erstellen
NotifyTray();
Application.Run();
mutex.ReleaseMutex();
}
else
{
splashScreen = new frmStart();
splashScreen.AppAlreadyExists();
}
}
Beenden tu ich mein Program über einen Toolstripbutton von meinem ContextStripMenue vom Notify icon.....
private void Exit_Click(object sender, EventArgs e)
{
if (_notico.Icon != null)
{
_notico.Icon.Dispose();
_notico.Icon = null;
}
Application.ExitThread();
Application.Exit();
}
leider reagiert das Application.ApplicationExit Event hier dann nciht mehr und das Programm wird gleich geschlossen
würd vorm schließen des Programms noch 1-2 methoden durchlaufen lassen und ein service abstellen
Selbiges wenn mein Process im Taskmanager abgebrochen wird .....
hat jemand schon erfahrungen gemacht wie man das hier am besten löst ?
public static class CAutostart
{
public static void InstallAutostart()
{
RegistryKey myKey;
myKey = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\" + "Windows\\CurrentVersion\\Run");
if (myKey == null) myKey = Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\" + "Windows\\CurrentVersion\\Run");
myKey = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\" + "Windows\\CurrentVersion\\Run", true);
myKey.SetValue(/*dein programmname (string )*/, CCentral.ApplicationPath + "\\/*dein programmname (string )*/.exe");
myKey.Close();
}
public static void UnInstallAutostart()
{
RegistryKey myKey;
myKey = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\" + "Windows\\CurrentVersion\\Run");
if (myKey == null) myKey = Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\" + "Windows\\CurrentVersion\\Run");
myKey = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\" + "Windows\\CurrentVersion\\Run", true);
myKey.DeleteValue(/*dein programmname (string )*/, false);
myKey.Close();
}
public static bool IsAutostart()
{
bool exists = false;
RegistryKey myKey;
myKey = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\" + "Windows\\CurrentVersion\\Run", true);
if (myKey.GetValue(/*dein programmname (string )*/) != null)
{
exists = true;
}
else
{
exists = false;
}
return exists;
}
}
public class CCentral
{
//------------------------------------------------------------------------------------------
/// <summary>
/// Returns Programm-Directory Path
/// </summary>
public static string ApplicationPath
{
get
{
return Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
}
}
}
sollte helfen 🙂
Stichwort : Webservice
bei einem Linux server kannst du die daten mit PHP aufbereiten
bzw dann mit request method GET oder Post arbeiten um die forms zu füllen
kleines beispiel wo ich ein xml aus dem web auslese
Uri uri = new Uri(/* DEIN STRING */);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
HttpWebResponse response;
Stream receiveStream;
try
{
response = (HttpWebResponse)request.GetResponse();
receiveStream = response.GetResponseStream();
xdoc.Load(receiveStream);
sollte als ansatz reichen ?
danke das hat mir schon sehr weitergeholfen 🙂
ja ich weis 🙂
ist ja auch eine alternative und wieder neu dazugelernt 🙂
Original von herbivore
Hallo Jabi,wie stehts um das mycsharp.de plugin für den IE ist das keine .NET entwicklung ?
nein, das ist eine simple XML(-artige) Datei. Das ist kein Programm. Kann du runterladen und dir ansehen.herbivore
oh das wäre eine alternative das so zu machen .....
wie gesagt lieber wäre es mir wenn das ganze wie die google toolbar ausgelegt ist
Hallo,
danke für die schnelle Antwort.
aber es wird nicht unmöglich sein ? eventuell hat jemand schonmal was versucht ?
wie stehts um das mycsharp.de plugin für den IE ist das keine .NET entwicklung ?
Hallo liebe community
leider hab ich hier nichts passendes gefunden und per google auch nicht das richtige....
Ich suche eine anleitung bzw ein How to wie man plugins/addins für den IE oder Firefox entwickeln kann.
Würde gerne sowas wie die Google toolbar entwickeln
natürlich für eine andere webseite 🙂
hat wer erfahrungen hiermit oder kann mir jemand einen link schicken wo sthet wie man so etwas realisieren kann bzw auf was man achten muss und wie ich die leiste reinbekomme
danke
wie siehts aus gibts schon was neues würde mich auch dafür intressieren 🙂
eventuell solltest du dich noch ein bischen mehr in die Grundlagen einlernen
namespace FotoManager
{
public class CDelegateLabel
{
//--------------------------------------------------------------------------------------------------
private delegate void SetLabelTextDelegate(Form frm, Label lbl, string text);
private static void _SetLabelText(Form frm, Label lbl, string text)
{
lbl.Text = text;
}
public static void SetLabelText(Form frm, Label lbl, string text)
{
frm.Invoke(new SetLabelTextDelegate(_SetLabelText), new object[] { frm, lbl, text });
}
//--------------------------------------------------------------------------------------------------
}
public class FotoManager
{
public void uploadPictures(string path, string server, string name, string passwort, System.ComponentModel.BackgroundWorker status)
{
foreach(string fileName in Directory.GetFiles(path))
{
uploadStatus += statusBarStep;
//Verbindung herstellen
try
{
//Datei Hochladen
///////////////////////////////////////////////////////////////////////
//Hier will ich in labelInfo z.B.: folgendes reinschreiben:
//labelInfo.Text = fileName+" wurde erfolgreich hochgeladen";
///////////////////////////////////////////////////////////////////////
CDelegateLabel.SetLabelText(MainForm, MainForm.labelInfo, fileName+" wurde erfolgreich hochgeladen");
status.ReportProgress(uploadStatus);
}
catch(Exception ex)
{
//Fehler
}
}
}
}
}
Meiner meinung nach hat das in der Klasse eh nichts zu suchen würde hier lieber ein event einbauen und das event dann in der Form abrufen
lg Jabi
public class CDelegateLabel
{
//--------------------------------------------------------------------------------------------------
private delegate void SetLabelTextDelegate(Form frm, Label lbl, string text);
private static void _SetLabelText(Form frm, Label lbl, string text)
{
lbl.Text = text;
}
public static void SetLabelText(Form frm, Label lbl, string text)
{
frm.Invoke(new SetLabelTextDelegate(_SetLabelText), new object[] { frm, lbl, text });
}
//--------------------------------------------------------------------------------------------------
}
sollte ansatz genug sein 🙂
so eine klasse ist aber schnell geschrieben .... kannst dir ja dann per events dann immer den aktuellen fortschritt anzeigen lassen
stichwort haltepunkte
wenn du vs 2005 hast .... so kansnt du im debug modus schön alles nachvollziehen wo der fehler ist wann und warum er auftritt ...
also wenn ich nciht grade in die MSDN sehe nehm ich viel meine bücher her kommt wohl auch daher das ich anfangs nur aus büchern gelernt habe 🙂
und ich mir viel beim lesen merke 🙂
public static string ApplicationPath
{
get
{
return Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
}
}
nehme ich immer her für den prog pfad 🙂
Hallo
Hoffe ich bin Hier im richtigen forum gelandet
Meine Frage:
Habe bei mir am Pc eine .Net anwendung installiert die nicht von mir ist und ich würde dort gerne sobald eine bestimmte winform geladen ist eine textbox mit einem string befüllen
wie kann ich jetzt mit einer anwendung von mir überprüfen ob diese form erstellt wurde und dann die eine textbox befüllen.....
kann mir hier jemand weiterhelfen ?
itextsharp ist das was du suchst aber ist halt relativ aufwendig besonders wenn man tabellen und so erstllen möchte kommt gleich mal ne menge code zusammen
google mal anch itextsharp da findest sicher ne menge dazu gibt auch online anleitungen und so
public static string ApplicationPath
{
get
{
return Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
}
}
vieleicht hilft dir das
edit:
using System.Reflection;
using System.IO;
nicht vergessen 🙂
hab für eine klasse von mir auch ne Exception gemacht
public class WatcherException : ApplicationException
{
public WatcherException()
: base()
{ }
public WatcherException(string strExceptionText)
: base(strExceptionText)
{ }
public WatcherException(string strExceptionText, Exception e)
: base(strExceptionText, e)
{ }
}
kannst auch beliebig erweitern....
edit:
Anwendung sollte sich von slebst erklären:
try
{
//versuche was
}
catch(WatcherException ex)
{
throw new WatcherException(ex.Message);
}
//oder
try
{
//versuche was
}
catch(WatcherException)
{
throw new WatcherException("Fehler aufgetreten");
}
// oder du fängst das ganze in einer MessageBox ab
try
{
//versuche was
}
catch(WatcherException ex)
{
MessageBox.Show(ex.Message,"Fehler aufgetreten !"MessageBoxButton.OK,MessageBoxIcon.Error);
}
ich hoffe das hat dir bissl weitergeholfen
der einzige lüfter der bei mir ist ist der am Radiator und den hört man so gut wie überhauptnicht da is das netzteil noch lauter ......
auch freunde von mir ... medientechniker die viel mit pc's arbeiten nehmen eine wasserkühlung her weil das arbeiten um einiges angenehmer ist auch wenn der rechner die nacht durchläuft is das kaum hörbar
klar funktioniert das auch mit nem Core 2 Duo E6600 🙂
ist auch nicht schwer einzubauen 🙂
bau dir ne wakü ein dann hast dein cpu lüfert problem auch weg 🙂
Hab selber ne Wasserkühlung und bin sehr zufrieden, benütze einen ZERN PQ-PLUS für meine cpu kühlt extrem gut
besten dank so hats funktioniert:
notico.Icon.Dispose();
notico.Dispose();
Application.ExitThread();
Application.Exit();
den befehl Close gibt es leider nicht => Class NotifyIcon
um keinen neuen thread zu starten hier ein weiteres problem
wenn ich meine tray application beende dann bleibt das Icon dennoch in der taskleiste erst wenn ich mit der Maus über das icon komme verschwindet das icon
hatte jemand schonmal dieses problem ?
beendet wird das ganze über das click event ( wie im artikel )
notico.Dispose();
Application.ExitThread();
Application.Exit();
hallo bekommst die 2 methoden am abend zugesandt hab sie leider nicht auf dem rechner hier
grundprinzip läuft so
1 methode verschlüsselt einen string und speichert ihn in einer textdatei am rechner
2methode brauchst du nur noch den filepfadangeben und die 2 key's
und du bekommst den entschlüsselten string zurück
vielleicht noch die credentials verschlüsselt speichern um nicht jedes mal bei einer passwort abfrage alles wieder einzugeben
wenn du dich per mail bei mir meldest kannst ne sehr gute verschlüsselungsmethode haben
hallo
konnte es aus zeitmangel leider nicht testen ...
eine frage ist es möglich hier auch mit credentials zu arbeiten ?
denn wenn ich eine exe datei auf dem server liegen habe würde ich die auch gerne mit einer ht.access schützen ???
am ende deiner thread methode:
//--------------------------------------------------------------------------------------------------
private delegate void Form_CloseDelegate(Form frm);
private static void _Form_Close(Form frm)
{
frm.Dispose();
frm.Close();
}
/// <summary>
/// Delegate zum schließen der Windows Form während ein Thread aktiv ist !
/// </summary>
/// <param name="frm">Name der zu schließenden Form</param>
public static void Form_CloseDel(Form frm)
{
frm.Invoke(new Form_CloseDelegate(_Form_Close), new object[] {frm });
}
//--------------------------------------------------------------------------------------------------
aufrufen:
Form_CloseDel(this)
//oder
Form_CloseDel(Form meinFormName)
danke
System.timers hats gebracht 🙂
danke
ja das kann schon sein da ich in meiner form einen externen thread starte in dem die klasse aufgerufen wird...
könnte mir jemand bei der problem lösung helfen... oder mir einen anderen ansatz geben
was heißt:
oder der Aufruf muss zu einem anderen Thread gemarshallt werden
das hier ? verstehe ich nciht so ganz ?
Hallo,
kleines problem.... habe mir eine Klasse geschrieben mit verschiedenen ftp funktionen
in der folgenden methode ( upload ) will ich auch die upload rate messen über ein eigenes event welches im tick event vom Timer ausgelöst wird
leider löst das tick event des timers nicht aus somit kann ich auch leider nicht die aktuelle uploadrate auslesen....
hier mal der quellcode
try
{
FileInfo fi = new FileInfo(FilePath);
Uri u = new Uri(HostAdress+fi.Name);
requ = (FtpWebRequest)WebRequest.Create(u);
requ.Credentials = new NetworkCredential(ftpUserName, ftpPassword);
requ.Method = WebRequestMethods.Ftp.UploadFile;
requ.Timeout = System.Threading.Timeout.Infinite;
requ.Proxy = null;
requStrm = requ.GetRequestStream();
byte[] buffer = new byte[2048];
int bytesRead;
long downloaded =0;
fileStrm = File.OpenRead(FilePath);
timer = new System.Windows.Forms.Timer();
timer.Interval = 1000;
timer.Tick += new EventHandler(timer_Tick1);
timer.Start();
while (true)
{
bytesRead = fileStrm.Read(buffer, 0, buffer.Length);
if (bytesRead == 0) break;
requStrm.Write(buffer, 0, bytesRead);
downloaded += bytesRead;
UploadSpeed += bytesRead;
OnUploadProgressPercent(downloaded, fi.Length);
}
timer.Stop();
timer.Dispose();
requStrm.Close();
// antwort holen
resp = (FtpWebResponse)requ.GetResponse();
OnUploadFinished();
}
hier die tick event methode:
die nicht ausgelöst wird
private void timer_Tick1(object sender, EventArgs e)
{
OnUploadRate(UploadSpeed);
UploadSpeed = 0;
}
Der timer ist am anfang der klasse instanziert
bin echt am rätseln warum der timer hier nicht ausgelöst wird vielleicht hatte schon mal jemand so ein problem
kleines beispiel:
private delegate TreeNode AddTreeNodesParentNodesDelegate(Form frm, TreeNode tn, string caption);
private static TreeNode _AddTreeNodesParentNodes(Form frm, TreeNode tn, string caption)
{
return tn.Parent.Nodes.Add(caption);
}
public static TreeNode AddTreeNodesParentNodes(Form frm, TreeNode tn, string caption)
{
return (TreeNode)frm.Invoke(new AddTreeNodesParentNodesDelegate(_AddTreeNodesParentNodes), new object[] { frm, tn, caption });
}
oder
private delegate void SetTreeNodeTagDelegate(Form frm, TreeNode tn, object tag);
private static void _SetTreeNodeTag(Form frm, TreeNode tn, object tag)
{
tn.Tag = tag;
}
public static void SetTreeNodeTag(Form frm, TreeNode tn, object tag)
{
frm.Invoke(new SetTreeNodeTagDelegate(_SetTreeNodeTag), new object[] { frm, tn, tag });
}
ánhand der 2 beispiele soltlest du eigentlich alles amchen können was du so brauchst :=)
bau die doch eine generische liste und nimm diese als dataSource her
ich kann dir nur empfehlen das manuell zu machen
ich hatte ein großes Dataset mit vielen verschiedenen einträgen das hätte nie so hingehaut
Habs die treenodes manuell erstellt und an das tag object die jeweilige id übergeben mit der ich danach meine abfragen über ein dataview koordiniert habe
war nicht wirklich viel schreib arbeit
hier auch noch 2 delegates für die progressbar 🙂
die kansnt du in ner klasse ablagern und jederzeit hernehmen
//--------------------------------------------------------------------------------------------------
private delegate void PgrBarValueUpdateDelegate(Form frm, ProgressBar pgrb, int value);
private static void _PgrBarValueUpdate(Form frm, ProgressBar pgrb, int value)
{
pgrb.Style = ProgressBarStyle.Blocks;
pgrb.Value = value;
}
public static void SetProgressbarValue(Form frm, ProgressBar pgrb, int value)
{
frm.Invoke(new PgrBarValueUpdateDelegate(_PgrBarValueUpdate), new object[] { frm, pgrb, value });
}
//--------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
private delegate void PgrBarPerformLayoutDelegate(Form frm, ProgressBar pgrb);
private static void _PgrBarPerformLayout(Form frm, ProgressBar pgrb)
{
pgrb.Value = 0;
pgrb.Style = ProgressBarStyle.Marquee;
pgrb.PerformLayout();
}
public static void PgrBarPerformLayout(Form frm, ProgressBar pgrb)
{
frm.Invoke(new PgrBarPerformLayoutDelegate(_PgrBarPerformLayout), new object[] { frm, pgrb });
}
//--------------------------------------------------------------------------------------------------
höre grundsätzlich auch musik beim programmieren
vorzugsweise metal, und klassisches
oder auch beides zusammen.... sollte wer Haggard kennen ....
wenn ich richtig gestresst bin ist oft auch house musik sehr entspannend für mich 🙂
aber ohne musik gehts ned so kann ich nciht arbeiten 🙂
Thread.Sleep()
könnte dir auch helfen das ganze zu bremsen 🙂
Hallo,
Danke werd ich mir gleich nocheinmal ansehen.
Vielleicht hat ja noch jemand was intressantes....
lg
Hallo liebe community,
Gibt es in .Net irgendwelche Bibliotheken mit den man ( ähnlich wie bei einer software firewall) ich überprüfen kann was sich gerade ins Internet rauswählt bzw was beim pc eingeht und ich eventuell hier eine berechtigung setzen kann mit zb zulassen oder sperren.
hat jemand schonmal sowas in der art gemacht oder wer schonmal was davon gehört ?
lg Jabi
also ich habe eine Dll in der ich mir die wichtigsten delegates zusammengeschrieben habe und diese so immer threadsicher nutzen kann
kleiner auszug könnte auch für die intressant sein
//--------------------------------------------------------------------------------
private delegate string GetLabelTextDelegate(Form frm, Label lbl);
private static string _GetLabelText(Form frm, Label lbl)
{
return lbl.Text;
}
/// <summary>
/// Liefert den Text des gewählten Labels zurück
/// </summary>
/// <param name="frm">Form des Controls</param>
/// <param name="lbl"> Control Name</param>
/// <returns>Label.Text</returns>
public static string GetLabelText(Form frm, Label lbl)
{
return frm.Invoke(new GetLabelTextDelegate(_GetLabelText), new object[] { frm, lbl }).ToString(); ;
}
//--------------------------------------------------------------------------------
aufzurufen dann zb: aktuelle form und labelname
MessageBox.Show(GetLabelText(this, label1));
vielleicht kannste das gebrauchen
lg Jabi
bei mir funktionierts auch ( win XP Prof.)
wünschenswert wäre wenn es eine tray application wäre was hilft es mir wenn ich nicht schnell drauf zugreifen kann man sich sicher herrvoragend für die taskbar
lg Jabi
was willst du denn vergleichen ? ob die Datei die gleichen werte hat ob die datei gleich aufgebaut ist sollte schon ein bischen genauer sein ....
wenn du vergleichen willst ob 2 dateien glecih sind kannst du ja nen CRC32 wert erstellen von beiden und vergleichen