C# i .Net Framework 4.0 + VS 2010 SP1 - problem zgodności aplikacji

0

Witam.
Mam problem z aplikacją napisaną na VS 2010 SP1 Win 7.

Aplikacja służy do szyfrowania za pomocą CPU oraz GPU. Na laptopie (tam gdzie była pisana) działa bez problemu. Uruchamiam aplikację, podaję klucz, dodaje pliki do listBox, uruchamiam CPU, GPU, otrzymuję wyniki szyfrowania, czasy szyfrowania i wykres. Mogę robić to co założyłem w projekcie.

Niestety kiedy przeniosłem aplikację na Win XP SP3 pojawiły się problemy (aplikacja szyfrująca na CPU jest na arch. x86 podobnie jak aplikacja okienkowa, natomiast aplikacja szyfrująca na GPU jest na x64 napisana była na x86, następnie przekompilowana i dopracowana na laptopie). Kiedy próbowałem odpalić aplikację podając wcześniej klucz i dodajac pliki (aplikacje GPU wcześniej przekompilowalem na x86) pojawił się błąd:

  1. Win32 exception was unhandled - w momencie kiedy uruchamiałem (debugowałem) z VS 2010 na XP
  2. Nie odnaleziono pliku - kiedy uruchamiałem sama aplikację, bezpośrednio z dysku (bez pośrednictwa kompilatora)

Dodam, że błąd pojawia się w tym miejscu kodu:

 DES_CUDA.Start();

Oto fragment kodu wywołujący aplikację:

 for (int i = 0; i < listBoxControl1.Items.Count; i++)
            {
                System.Diagnostics.Process DES_CUDA = new Process();

                DES_CUDA.StartInfo.FileName = "test1.exe";
                DES_CUDA.StartInfo.Arguments = "\"" + listBoxControl1.Items[i].ToString() + "\" \"" + textBox1.Text + "\"";
                DES_CUDA.Start();
                while (!DES_CUDA.HasExited) ;
                
                string SciezkaPliku = listBoxControl1.Items[i].ToString()+"_CPU_T";
                StreamReader plik = new StreamReader(SciezkaPliku);

Dodam jeszcze, że w aplikacji mogę wywołać program np. deviceQuery.exe który podaje dane o karcie graficznej, w momencie dodania pliku do listBox'a otrzymuje komunikat z pkt. 2 - Nie można odnaleźć pliku.

Aplikacja szyfrująca na CPU jak i na GPU działają w wersjach konsolowych (jak widać te programy szyfrujące to konsole, które wywołując przekazuje parametry) mogę je uruchomić z CMD lub PS i otrzymuje dobre wyniki.

Błąd leży po stronie aplikacji Windows Forms ale nie wiem gdzie dokładnie szukać rozwiązania.

A to dwa komunikaty o błędach jakie otrzymałem:

  1. (ten komunikat otrzymałem po uruchomieniu aplikacji na XP za posrednictwe kompilatora w trybie Debug/Release - ścieżka C:\Users... to ścieżka z Win 7 - tu skończyły mi sie pomysły :(

See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.

         * Exception Text **************

System.ComponentModel.Win32Exception (0x80004005): Nie można odnaleźć określonego pliku
at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start()
at Praca_Inżynierska.Form1.ButtonCPU_Click_1(Object sender, EventArgs e) in C:\Users\RIPPER\documents\visual studio 2010\Projects\Praca\Praca\Form1.cs:line 433
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

         * JIT Debugging **************

To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

<configuration> <system.windows.forms jitdebugging="true" /> </configuration>

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.

System.ComponentModel.Win32Exception was unhandled
Message=Nie można odnaleźć określonego pliku
Source=System
ErrorCode=-2147467259
NativeErrorCode=2
StackTrace:
at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start()
at Praca_Inżynierska.Form1.ButtonGPU_Click_1(Object sender, EventArgs e) in c:\Documents and Settings\RIPPER\Moje dokumenty\Visual Studio 2010\Projects\Praca\Praca\Form1.cs:line 485
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at Praca_Inżynierska.Program.Main() in c:\Documents and Settings\RIPPER\Moje dokumenty\Visual Studio 2010\Projects\Praca\Praca\Program.cs:line 18
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:

Spotkaliście kiedyś z podobnym zdarzeniem?

Proszę o pomoc w rozwiązaniu tego problemu.

0

Po pierwsze masz jasno i wyraźnie napisane "Nie można odnaleźć określonego pliku"
"at Praca_Inżynierska.Form1.ButtonGPU_Click_1(Object sender, EventArgs e) in c:\Documents and Settings\RIPPER\Moje dokumenty\Visual Studio 2010\Projects\Praca\Praca\Form1.cs:line 485"

Domyślam się że chodzi o DES_CUDA.StartInfo.FileName = "test1.exe";
Gdzie masz plik test1.exe? Powinien być w katalogu gdzie jest twój exe, chyba że zmieniłeś working dir.

0

Nie, nic nie zmieniałem. A możesz wyjaśnić gdzie zmienia się working dir?

0

Moim zdaniem najbezpieczniej jest podawać bezwzględne ścieżki do plików i katalogów.

1 użytkowników online, w tym zalogowanych: 0, gości: 1