C# File exe non funziona su altro pc

argomino57

Utente Electrum
30 Luglio 2015
170
26
8
100
Salve, ho programmato un applicazione in c# servendomi della dll di autoit. Dopo aver compilato il programma, andando a esportare il file exe ,e il resto dei file generati nella cartella publish, su un altro pc(il quale ha installato sia vs che il .net framework 4.6.1 usato per programmare il programma in questione) sorge il problema: il programma(il file exe) non si avvia....o meglio, controllando il task manager, il processo si avvia dopo all'incirca un paio di secondi scompare. Ho già effettuto i vari tentativi di disattivare antivius/windows defender/smart screen.
 
Hai qualche blocco try/catch senza log di errore?
il codice non presenta blocchi try/catch , nè tantomeno cicli, giusto qualche piccola operazione sfruttando la dll di autoit.....sull altro pc sempre la stessa cosa....doppio click sul file exe e puntualmente vedo il processo apparire e scomparire sul task manager...di una finestra neanche l'ombra
 
Prova a togliere la libreria di autoit ed avvialo sul tuo pc, se si comporta nello stesso modo evidentemente non trova la libreria
si, hai trovato il problema....ho tolto la dll di autoit dalla cartella di debug e avviato il programma...processo si avvia e si chiude, mentre andando a rimettere la dll di autoit il programma si avvia.....ora come risolvo?
 
il codice della classe in cui uso la libreria di autoit è il seguente
C#:
 class automazione
    {
        AutoItX3 auto = new AutoItX3();



        public void mMove()
        {
            TextBox t = Application.OpenForms["Form1"].Controls["textBox1"] as TextBox;
            auto.WinSetState(t.Text, "", auto.SW_SHOWMAXIMIZED);

        }
        public void cClick(string clickSide, int x, int y, int manyCLick, int speed)
        {
            auto.MouseClick(clickSide, x, y, manyCLick, speed);
        }
        public void tastoFundici()
        {
            auto.Send("{f11}");
        }
        public void Pausa(int millisecondi)
        {
            auto.Sleep(millisecondi);
        }
        public void scrolla(string direzione, int quanto)
        {
            auto.MouseWheel(direzione, quanto);
        }
    }
}
 
il codice della classe in cui uso la libreria di autoit è il seguente
C#:
 class automazione
{
AutoItX3 auto = new AutoItX3();



public void mMove()
{
TextBox t = Application.OpenForms["Form1"].Controls["textBox1"] as TextBox;
auto.WinSetState(t.Text, "", auto.SW_SHOWMAXIMIZED);

}
public void cClick(string clickSide, int x, int y, int manyCLick, int speed)
{
auto.MouseClick(clickSide, x, y, manyCLick, speed);
}
public void tastoFundici()
{
auto.Send("{f11}");
}
public void Pausa(int millisecondi)
{
auto.Sleep(millisecondi);
}
public void scrolla(string direzione, int quanto)
{
auto.MouseWheel(direzione, quanto);
}
}
}
Ok, questo è il suo utilizzo. Quello che intendo io è diverso. Ad ogni modo fai cosi:
"Ho vs in inglese"
-Resources
-COM library ed aggiungi la tua libreria.
-Seleziona la libreria dopo in resources e impostarla come "embedded resource".
Prova.
 
  • Mi piace
Reazioni: lupobianco
Ok, questo è il suo utilizzo. Quello che intendo io è diverso. Ad ogni modo fai cosi:
"Ho vs in inglese"
-Resources
-COM library ed aggiungi la tua libreria.
-Seleziona la libreria dopo in resources e impostarla come "embedded resource".
Prova.
Ok, questo è il suo utilizzo. Quello che intendo io è diverso. Ad ogni modo fai cosi:
"Ho vs in inglese"
-Resources
-COM library ed aggiungi la tua libreria.
-Seleziona la libreria dopo in resources e impostarla come "embedded resource".
Prova.
allora io ho provato sia facendo semplicemente ciò che hai detto, sia implementando ciò con questo codice nel Program.cs
Codice:
 AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
            Application.Run(new Form1());
        }

        static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
        {
            using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Applicazione.Interop.AutoItX3Lib.dll"))
            {
                byte[] assemblyData = new byte[stream.Length];
                stream.Read(assemblyData, 0, assemblyData.Length);
                return Assembly.Load(assemblyData);
            }
Ci tengo a sottolineare che con l'aggiunta di tale codice sul mio pc l'exe funziona anche senza la dll nella cartella di debug
 
Allora, scusa se rispondo solo ora.
Il problema risiede tutto in come linki la libreria nel progetto. Non c'entra come scrivi il programma ma come linki il tutto nella soluzione.



Questo video forse può porre rimedio a questo problema.