小编Ore*_*ost的帖子

如何找到Windows SDK的SetEnv.cmd / SetEnv.cmd无法正常工作

我们正在运行一个Team City Build Server,并且希望编译一个Visual C ++项目。到目前为止,这很容易,因为我已经使用Windows SDK设置了Windows Build Agent,但是我们没有解决方案/项目文件。

而是使用CMake创建项目文件。CMake似乎有点笨(当未安装Visual Studio时无法生成解决方案),但是通过一些技巧,我可以做到这一点。然后可以使用MSBuild构建该解决方案。

问题来了。为了自动运行,我需要调用Windows SDK的SetEnv.cmd。而且我似乎无法自动找到它。它位于Windows SDK的bin子目录中,但是bin和root都不在路径中,并且%mssdk%环境变量由SetEnv.cmd设置,并且事先不可用!

将Windows SDK \ bin目录添加到PATH会导致SetEnv.cmd不再起作用(退出时显示类似The x86 compilers are not currently installed和的消息Jump target Set_x86 not found

开始菜单链接正在使用Windows SDK目录作为工作目录来调用SetEnv.cmd。但是,如果我将根目录添加到PATH,则Bin \ SetEnv.cmd不可用。

如何自动找到SetEnv.cmd?即使将环境变量设置为setenv.cmd的完整路径也不起作用,并且当我将%mssdk%定义为sdk目录时,则调用%mssdk%\ bin \ SetEnv也不起作用。我还尝试定义%mssdk%,然后定义cd%mssdk%,然后调用bin \ SetEnv。此外,在所有这些情况下都找不到编译器。如果我在命令行上手动cd到根目录或bin目录,然后调用SetEnv.cmd,它也将不起作用。

虽然开始菜单链接可以正常工作。

作为记录,我目前的解决方案如下:

我创建了一个MSBuild文件,该文件在命令行上使用CMake创建了解决方案文件,然后使用MSBuild任务调用了创建的解决方案。可以从TeamCity轻松构建MSBuild文件,尽管我需要一些其他技巧来满足CMake愚蠢的寻找编译器的麻烦,尽管我不会调用它。并不是很令人满意,但是可以。

windows msbuild sdk setenv

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

在线程中调用SHGetFileInfo以避免UI冻结

在.NET 4.0应用程序(WPF)中,我们使用SHGetFileInfo获取目录树的shell图标.由于这在某些情况下需要相当长的时间(即对于无法访问的网络驱动器或软盘驱动器),我们希望在一个线程中执行此操作,然后在读入时更新图标.

调用基本相同,现在只是在一个线程中执行.因为有人说线程必须STA为此工作,我们使用Thread而不是ThreadPool进行测试,结果相同.使用ThreadPool也没有用.

SHGetFileInfo 成功(返回1),但结构中的hIcon成员为零.

IntPtr GetIcon(string name)
{
    Shell32.SHFILEINFO shfi = new Shell32.SHFILEINFO();
    uint flags = Shell32.SHGFI_ICON | Shell32.SHGFI_USEFILEATTRIBUTES | Shell32.SHGFI_SMALLICON;

    Shell32.SHGetFileInfo(
        name, System.IO.Directory.Exists(name) ? Shell32.FILE_ATTRIBUTE_DIRECTORY : Shell32.FILE_ATTRIBUTE_NORMAL,
        ref shfi, 
        (uint) System.Runtime.InteropServices.Marshal.SizeOf(shfi), 
        flags );
    return shfi.hIcon;
}
Run Code Online (Sandbox Code Playgroud)

完全相同的代码可以从GUI线程中正常工作.要使函数从单独的线程工作,或者使其在不阻塞GUI线程的情况下工作,必须做些什么?


更新:围绕这个的代码基本上是这样的:

var thread = new System.Threading.Thread(() => {
    var result = GetIcon("C:\\");
    // ... do something with the result
});
thread.SetApartmentState(System.Threading.ApartmentState.STA);
thread.Start();
Run Code Online (Sandbox Code Playgroud)

如果只留下线程委托中的行,它可以正常工作(当然,在GUI线程上).


更新:目前,我们只是调用SHGetFileInfo它来使其工作.这样做的好处是,原始问题(在加载所有图标之前未显示文件视图的页面)已经解决,但这意味着页面会挂起每个图标.但至少用户现在看到了一些事情正在发生.我们仍在寻找问题的实际解决方案.

windows multithreading shell32 .net-4.0

6
推荐指数
2
解决办法
2009
查看次数

Windows窗体:带有历史记录的文本框

有没有人知道一个Windows窗体控件,就像浏览器的地址栏?

它就像一个文本框,但在右边有一个下拉菜单,显示以前输入的文本的历史记录.

非常感谢!

history textbox edit winforms

4
推荐指数
1
解决办法
3568
查看次数

如何在MFC中禁用"最大化"按钮?

如何在SDI应用程序中禁用"最大化"按钮/功能?

mfc maximize sdi visual-c++

4
推荐指数
3
解决办法
5836
查看次数

在本地调试.NET Compact Framework应用程序(无需模拟器或设备)

我目前正处于一个新项目的准备阶段,该项目将使用.NET Compact Framework(我们将看到2.0或3.5)开发,并将在自定义Windows CE 6硬件上运行。但是,有一件事我无法上班:

似乎只有使用物理设备或仿真器才能进行调试。但是,当我仅从资源管理器启动该应用程序时,它可以在我的桌面上愉快地运行(因为CF当然是安装在我的开发计算机上的。因此,实际的问题是:

如何使用在台式机CF框架上运行的应用程序在台式机系统上调试.NET CF应用程序?还是不可能?如果是后者,我应该怎么做?创建非CF项目进行调试?我知道我应该在设备上调试,这对于应用程序的后端至关重要,但是GUI可以在桌面上调试。由于它使用的是OpenGL,因此它的运行速度比仿真器快得多(设备具有OpenGL加速功能)。

debugging compact-framework windows-ce visual-studio-2008

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

如何从代码运行命令行命令

我需要做两件事:运行批处理文件(工作正常),并运行命令(不起作用).该命令的方法抛出异常'file not found'.如果我打开一个cmd窗口,并键入命令,它可以正常工作.

  private static void Rescan()
    {
        //System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo("DEVCON ReScan");
        //psi.RedirectStandardOutput = true;
        //psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        //psi.UseShellExecute = false;
        //System.Diagnostics.Process proc = System.Diagnostics.Process.Start(psi);
        System.Diagnostics.Process proc = new System.Diagnostics.Process();
        proc.StartInfo.FileName = "DEVCON ReScan";
        proc.StartInfo.RedirectStandardError = true;
        proc.StartInfo.RedirectStandardOutput = true;
        proc.StartInfo.UseShellExecute = false;
        proc.Start();
        proc.WaitForExit();
        System.IO.StreamReader myOutput = proc.StandardOutput;
        proc.WaitForExit(4000);
        if (proc.HasExited)
        {
            string output = myOutput.ReadToEnd();
            FileIO.WriteLog(_writePath, output);
        }

    }
Run Code Online (Sandbox Code Playgroud)

注释的代码也会抛出相同的异常.

.net c# command-line batch-file

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

MSBUILD配置:将输出复制到临时区域

好吧,我不是MSBUILD最好的.实际上,我什么都不知道.我需要一些帮助来配置我的解决方案文件,以告诉MSbuild将已编译的输出复制到暂存区域.该解决方案有大约35个项目.我需要的只是其中5个要在发布模式下复制到暂存文件夹.请假设我什么都不知道......

谢谢

msbuild

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

通过InnoSetup中的脚本访问文件列表

有没有办法在运行安装程序时从PascalScript访问文件列表([Files]部分中的条目)?我们试图直接从设置中运行应用程序,而不是必须安装它,这样可以更容易地维护文件列表.

inno-setup pascalscript

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

在字符串中搜索垃圾字符

我想将以下代码集成到主应用程序代码中.填充了o/p字符串的垃圾字符转储应用程序以下代码snipette不起作用..

void stringCheck(char*);

int main()
{
    char some_str[] = "Common Application FE LBS Serverr is down";
    stringCheck(some_str);
}


void stringCheck(char * newString)
{
    for(int i=0;i<strlen(newString);i++)
    {
        if ((int)newString[i] >128)
        {

TRACE(" JUNK Characters in  Application Error message FROM DCE IS = "<<(char)newString[i]<<"++++++"<<(int)newString[i]);

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我更好的方法来找到字符串中的垃圾字符..

非常感谢

c++

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

如何将文本格式化为######.##

如何将文本限制为6个数字.2个号码?

(###### ##)

提前致谢

.net c#

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