2016-04-27 60 views
0

我遇到了一件非常奇怪的事情。我用C#編寫了一個非常簡單的程序,並試圖構建它的32位和64位版本。 64位版本工作正常,但每當我嘗試構建32位版本時,我的防病毒軟件將其刪除。我上傳的文件都在這裏virustotal:Virustotal flag我的程序的32位版本爲惡意軟件

32位:https://virustotal.com/da/file/fdb3d2870ce876b49eb5d9371fc0b133b7657ddd994603777a42a47f3eb09d8b/analysis/1461779525/

64位: https://virustotal.com/da/file/83334954cb0baef30153ca8bdfa900b64fef33f1983899c9e54e9156b72df00c/analysis/1461779699/

爲什麼?它的代碼完全相同,唯一的區別是我在構建之前在x64和x86之間切換。

+0

這裏是項目(VS2015)https://dl.dropboxusercontent.com/u/83131608/ResistorLookup.7z – Linkyyy

回答

0

從代碼中刪除P/Invokes後,您可以將項目設置爲AnyCPU。這樣你就不需要x86和x64版本。

我沒有看到你的項目什麼看起來關閉,除了使用以下行:

[DllImport("psapi.dll")] 
    static extern int EmptyWorkingSet(IntPtr hwProc); 

    static void MinimizeFootprint() 
    { 
     EmptyWorkingSet(System.Diagnostics.Process.GetCurrentProcess().Handle); 
    } 

    ... 

    GC.Collect(); 
    MinimizeFootprint(); 

鑑於你的小應用程序真的應該不需要手動和調用垃圾收集器調整工作集。 There are known issues with using it

而不只是清理你的畫筆,當你與他們進行:

private void DrawResistor(PaintEventArgs e) 
{ 
    Graphics g = e.Graphics; 
    SolidBrush brs; 

    //Første farve 
    g.DrawLine(Pens.Black, 130, 35, 130, 109); 
    g.DrawLine(Pens.Black, 140, 35, 140, 109); 
    using (brs = new SolidBrush(this.Controls.Find(Farver[0], false)[0].BackColor)) 
    { 
     g.FillRectangle(brs, 131, 35, 9, 75); 
    } 

    //Anden farve 
    g.DrawLine(Pens.Black, 160, 44, 160, 100); 
    g.DrawLine(Pens.Black, 170, 44, 170, 100); 
    using (brs = new SolidBrush(this.Controls.Find(Farver[1], false)[0].BackColor)) 
    { 
     g.FillRectangle(brs, 161, 44, 9, 56); 
    } 

    //Tredje farve 
    if (comboBox1.SelectedIndex != 0) 
    { 
     g.DrawLine(Pens.Black, 190, 44, 190, 100); 
     g.DrawLine(Pens.Black, 200, 44, 200, 100); 
     using (brs = new SolidBrush(this.Controls.Find(Farver[2], false)[0].BackColor)) 
     { 
      g.FillRectangle(brs, 191, 44, 9, 56); 
     } 
    } 

    //Fjerde farve 
    g.DrawLine(Pens.Black, 220, 44, 220, 100); 
    g.DrawLine(Pens.Black, 230, 44, 230, 100); 
    using (brs = new SolidBrush(this.Controls.Find(Farver[3], false)[0].BackColor)) 
    { 
     g.FillRectangle(brs, 221, 44, 9, 56); 
    } 

    //Femte farve 
    g.DrawLine(Pens.Black, 265, 35, 265, 109); 
    g.DrawLine(Pens.Black, 280, 35, 280, 109); 
    using (brs = new SolidBrush(this.Controls.Find(Farver[4], false)[0].BackColor)) 
    { 
     g.FillRectangle(brs, 266, 35, 14, 75); 
    } 

    //Sjette farve 
    if (comboBox1.SelectedIndex == 2) 
    { 
     g.DrawLine(Pens.Black, 293, 35, 293, 109); 
     g.DrawLine(Pens.Black, 303, 35, 303, 109); 
     using (brs = new SolidBrush(this.Controls.Find(Farver[5], false)[0].BackColor)) 
     { 
      g.FillRectangle(brs, 294, 35, 9, 75); 
     } 
    } 
} 
+0

謝謝期待你的答覆!就在我發佈我的代碼之前,我發現我在OnPaint事件中設置了picturebox1.image,這就是爲什麼它當時使用了近80MB。我解決了這個問題,並忘記刪除收費電話,另一個API調整。我已經刪除了該部分,當我用x86重新編譯爲目標時,它仍然會標記.exe文件。很奇怪! https://virustotal.com/da/file/7c306c6c1bf2803add0cc3b7541c2566f0995054c81a9f725459f22249cb9a47/analysis/1462114085/ – Linkyyy

+0

這是新的項目文件https://dl.dropboxusercontent.com/u/83131608/ResistorLookup2.7z – Linkyyy

+0

二進制看起來很好,我自己的反病毒程序也不會將其標記。除了向您反映病毒供應商的誤報之外,您無能爲力。 PS:你應該真的使用using語句來處理你的畫筆。 – jessehouwing