小编mmr*_*mmr的帖子

如何使用完全独立的.NET 3.5 sp1安装程序制作WiX安装程序?

我需要将完整的.NET 3.5 sp1安装程序包含在我的安装程序中,该安装程序位于WiX中.

我需要将boostrapper完全自包含,完全没有Web访问权限.这个安装程序不允许要求Web; 我们有外地蒙古的客户(我很认真,不仅仅是使用地名,因为它很遥远)我们运送CD,因为他们根本没有互联网接入.

WiX教程指出:

<Target Name="AfterBuild">
    <GenerateBootstrapper ApplicationFile="$(TargetFileName)" 
                      ApplicationName="My Application Name"
                      BootstrapperItems="@(BootstrapperFile)"
                      ComponentsLocation="Relative"
                      CopyComponents="True"
                      OutputPath="$(OutputPath)"
                      Path="C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\"/>
</Target>
Run Code Online (Sandbox Code Playgroud)

上述引导程序需要Web.如何制作不安装的安装程序?

.net msbuild installer windows-installer offline

11
推荐指数
1
解决办法
6931
查看次数

如何避免WPF全屏应用中的闪烁?

我有一个WPF应用程序,它是一个全屏自助服务终端应用程序.它实际上是一个非常复杂的应用程序,但这里有一些显示基本概念的代码.基本上,每当用户从一个屏幕进入下一个屏幕时,就会出现一些严重的闪烁,从而打开新窗口.在严重的情况下,桌面会在新屏幕显示之前显示几秒钟.在这个示例代码中不会发生这种情况,因为它非常简单,但添加了一些按钮和样式,你会看到它.

App.xaml.cs:

public partial class App : Application {
    Manager mManager;
    public App() {
        mManager = new Manager();
        Window1 screen1 = new Window1(mManager);
        mManager.Screen1 = screen1;
        try {
            this.Run(screen1);
        } catch (Exception e) {
            System.Console.WriteLine(e.ToString());                
        } finally {
            Application.Current.Shutdown();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Window1.xaml.cs:

public partial class Window1 : Window {
    Manager Manager{get; set;}
    public Window1(Manager inManager) {
        InitializeComponent();
        Manager = inManager;
    }

    private void OnChangeScreen(object sender, RoutedEventArgs e) {
        Manager.OpenScreen2();
    }
}
Run Code Online (Sandbox Code Playgroud)

Window2.xaml.cs:

public partial class Window2 : Window { …
Run Code Online (Sandbox Code Playgroud)

.net wpf fullscreen flicker

11
推荐指数
1
解决办法
1万
查看次数

Winform到WPF转换:BeginInvoke到什么?

这是来自WinForms的旧代码:

    private void ValueChanged(double inValue1, double inValue2) {
        //only manual mode for this driver, so that's easy.
        if (ValueLabel.InvokeRequired) {
            ValueLabel.Invoke(new MethodInvoker(delegate {
                ValueLabel.Text = (inValue1* inValue2/ 1000).ToString("f1");
            }
                ));
        }
        else {
            ValueLabel.Text = (inValue1* inValue2/ 1000).ToString("f1");
        }
    }
Run Code Online (Sandbox Code Playgroud)

是否有一种简单的方法将其转换为WPF友好?到目前为止,我有:

   private void KVPValueChanged(double inValue1, double inValue2) {
        if (ValueLabel.Dispatcher.Thread == Thread.CurrentThread){
            ValueLabel.Content = (inValue1* inValue2/ 1000).ToString("f1");
        } else {
            ValueLabel.Dispatcher.BeginInvoke(delegate {
                ValueLabel.Content = (inValue1* inValue2/ 1000).ToString("f1");
            });
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是第二个"代表"呼叫失败了.我该如何调用此委托?我想我可以完成整个制作委托方法,制作委托方法的实例,调用该特定实例等,但我认为这些匿名委托的重点是避免这种麻烦.另外,我的旧winforms代码在整个地方都有第一个实现,所以我真的想避免让我的所有代表去匿名化.

编辑:我可以像以前一样尝试使用MethodInvoker,但编译器会感到困惑.MethodInvoker是System.Windows.Forms的一部分,因此使用该方法不起作用.如:

    private void ValueChanged(double inValue1, double inValue2) { …
Run Code Online (Sandbox Code Playgroud)

wpf delegates begininvoke winforms

10
推荐指数
2
解决办法
2万
查看次数

如何修复此vs10不一致的dll链接警告?

在使用visual studio 10(32位版本)构建gdcm时,我正在尝试修复一系列警告:

4>..\..\..\..\gdcm\Utilities\gdcmexpat\lib\xmlparse.c(647): warning C4273: 'XML_ParserCreate' : inconsistent dll linkage
4>          d:\src\gdcm\gdcm\utilities\gdcmexpat\lib\expat.h(206) : see previous definition of 'XML_ParserCreate'
Run Code Online (Sandbox Code Playgroud)

函数调用本身看起来像:

XML_Parser XMLCALL
XML_ParserCreate(const XML_Char *encodingName)
{
   return XML_ParserCreate_MM(encodingName, NULL, NULL);
}
Run Code Online (Sandbox Code Playgroud)

哪里

#define XMLCALL __cdecl
Run Code Online (Sandbox Code Playgroud)

XMLPARSEAPI(XML_Parser)
XML_ParserCreate(const XML_Char *encoding);
Run Code Online (Sandbox Code Playgroud)

哪里

#define XMLPARSEAPI(type) XMLIMPORT type XMLCALL
Run Code Online (Sandbox Code Playgroud)

#define XMLIMPORT __declspec(dllimport)
Run Code Online (Sandbox Code Playgroud)

如果我正确地阅读,那意味着链接始终是__cdecl通过XMLCALL--对吗?因为,如果是这样,那么警告是多余的,还是我误解了这个?

c++ warnings visual-studio

10
推荐指数
1
解决办法
3万
查看次数

在使用Poltergeist运行Capybara时,如何获取当前主机名和端口?

我有一个测试程序,它通过向rails服务器发送大块数据来模仿用户的iOS设备.该程序在测试之外工作正常.在测试中,程序立即超时,因为它找不到服务器.

我的配置,在env.rb中:

require 'capybara/poltergeist'
Capybara.javascript_driver = :poltergeist
Capybara.server_port = 3123
Capybara.app_host = "http://0.0.0.0:3123"
Run Code Online (Sandbox Code Playgroud)

在测试中,我尝试过类似的东西

puts Capybara.current_session.current_host
puts Capybara.current_session.current_url
Run Code Online (Sandbox Code Playgroud)

等等,但这些都是空白的.这样做:

放下Capybara.current_session

产生一个内存地址,所以我知道当前的会话正在运行.

这是在宝石文件中像Capybara这样设置的:

gem 'capybara', '~> 2.0.2
Run Code Online (Sandbox Code Playgroud)

我已经看到了几个基于此的问题,但他们的答案对我不起作用.具体来说,Capybara似乎没有像我指定的那样设置当前主机或url,也不是实际允许我查看当前会话的内容.那么我该如何解决这个问题并指定一个特定的端口和网址呢?

capybara ruby-on-rails-3 poltergeist

10
推荐指数
1
解决办法
3570
查看次数

以编程方式杀死C#中vista/windows 7中的进程

我想在vista/windows 7中以编程方式杀死一个进程(我不确定两者之间的UAC实现是否存在重大问题以产生影响).

现在,我的代码看起来像:

  if(killProcess){
      System.Diagnostics.Process[] process = System.Diagnostics.Process.GetProcessesByName("MyProcessName");
       // Before starting the new process make sure no other MyProcessName is running.
        foreach (System.Diagnostics.Process p in process)
        {
            p.Kill();
        }

        myProcess = System.Diagnostics.Process.Start(psi);
   }
Run Code Online (Sandbox Code Playgroud)

我必须这样做,因为我需要确保如果用户崩溃程序或突然退出,则在重新启动应用程序时重新启动此辅助进程,或者如果用户想要更改此辅助进程的参数.

该代码在XP中运行良好,但在Windows 7(我假设在Vista中)失败时出现"访问被拒绝"消息.从全能的Google告诉我的内容来看,我需要以管理员的身份运行我的杀戮程序以解决这个问题,但这只是一个弱点.另一个可能的答案是使用LinkDemand,但我不理解LinkDemand的msdn页面,因为它与进程有关.

我可以将代码移动到一个线程中,但是它有许多固有的其他困难,我真的不想发现它.

c# kill process windows-vista

9
推荐指数
1
解决办法
2万
查看次数

基准测试:我什么时候可以停止测量?

我有一系列功能,都是为了做同样的事情而设计的.相同的输入产生相同的输出,但执行它们所需的时间因功能而异.我想确定哪一个是"最快的",我想确信我的测量结果是"具有统计意义".

仔细阅读维基百科和互联网告诉我,统计显着性意味着测量或测量组与零假设的p值阈值不同.这将如何适用?函数A比函数B快的假设是什么?

一旦我定义了整个设置,我该如何确定何时停止测量?我通常会看到基准测试运行三次,然后报告平均值; 为什么三次而不是五次或七次?根据统计意义的这一页(我自己承认我并不完全理解),费舍尔使用8作为他需要以98%的置信度测量某些东西的样本数量; 为什么8?

language-agnostic statistics benchmarking

9
推荐指数
2
解决办法
352
查看次数

将Windows 7屏幕键盘整合到WPF应用程序中

Windows 7有一个非常好的屏幕键盘程序/控制触摸屏.我有一个最初编写的触摸屏应用程序,将部署在XP上.是否可以将此键盘直接合并到我的应用程序中,而不是使用自定义控件?我找不到关于它的程序化信息,所以任何链接都会非常有用.具体来说,我需要:

  1. 能够在安装了.NET 3.5 sp1的XP机器上使用键盘.
  2. 为了能够在Windows 7上隐藏原生键盘,因为我已经在我的UI中集成了触摸屏键盘,因此我不需要另外一个混乱UI.

这种原生键盘有两个吸引人的方面.首先,它会自动本地化为客户的语言(虽然应用程序的其余部分需要修改),其次,它似乎没有"触摸延迟",因为操作系统试图弄清楚我是否'做一个手势,因为我在键盘上打字.

该应用程序基于WPF,应该意味着轻松集成基于Windows 7的控件.

编辑:我真的很喜欢XP的东西,但这不是一个要求.但是,在Win7中使用键盘的能力似乎应该是可能的,甚至是正确的方法.

keyboard wpf windows-7

8
推荐指数
1
解决办法
7526
查看次数

如何将vector <int>从C++ dll编组到C#应用程序?

我有一个C++函数,它生成一个有趣的矩形列表.我希望能够从C++库中获取该列表并返回到调用它的C#应用​​程序.

到目前为止,我正在编码矩形,如下所示:

struct ImagePatch{ 
   int xmin, xmax, ymin, ymax;
}
Run Code Online (Sandbox Code Playgroud)

然后编码一些向量:

void MyFunc(..., std::vector<int>& rectanglePoints){
   std::vector<ImagePatch> patches; //this is filled with rectangles
   for(i = 0; i < patches.size(); i++){
       rectanglePoints.push_back(patches[i].xmin);
       rectanglePoints.push_back(patches[i].xmax);
       rectanglePoints.push_back(patches[i].ymin);
       rectanglePoints.push_back(patches[i].ymax);
   }
}
Run Code Online (Sandbox Code Playgroud)

用于与C#交互的标题看起来像(并且适用于许多其他函数):

extern "C" {
    __declspec(dllexport) void __cdecl MyFunc(..., std::vector<int>& rectanglePoints);
}
Run Code Online (Sandbox Code Playgroud)

是否有一些关键字或其他我可以做的东西来取出那组矩形?我发现这篇文章用于在C#中编组对象,但它看起来太复杂了,太过于缺乏解释.整数向量是正确的方法,还是有其他技巧或方法?

.net c# c++ stl marshalling

8
推荐指数
2
解决办法
1万
查看次数

是否有比qsort更快的排序程序?

这不是一个算法问题,而是一个实现问题.

我有一个看起来像这样的数据结构:

struct MyStruct {
   float val;
   float val2;
   int idx;
}
Run Code Online (Sandbox Code Playgroud)

我浏览了大约4000万个元素的数组,并将'val'字段指定为元素,并将'idx'字段指定为索引.

我接着说:

MyStruct* theElements = new MyStruct[totalNum];
qsort(theElements, totalNum, sizeof(MyStruct), ValOrdering);
Run Code Online (Sandbox Code Playgroud)

然后,一旦我填写val2,逆转程序

qsort(theElements, totalNum, sizeof(MyStruct), IndexOrdering);
Run Code Online (Sandbox Code Playgroud)

哪里

static int ValOrdering(const void* const v1, const void* const v2)
{
  if (((struct MyStruct*) v1)->val < ((struct MyStruct*) v2)->val)
    return -1;

  if (((struct MyStruct*) v1)->val> ((struct MyStruct*) v2)->val)
    return 1;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

static int IndexOrdering(const void* const v1, const void* const v2)
{
  return ((struct MyStruct*) v1)->idx- ((struct MyStruct*) …
Run Code Online (Sandbox Code Playgroud)

c++ sorting

8
推荐指数
2
解决办法
5168
查看次数